执行流程
全局变量定义 -> init函数 -> main函数
引用包变量定义 -> 引用包init函数 -> 执行包变量定义 -> 执行包init函数 -> 执行包main函数
defer
defer先进后出
defer会把相关值一起入栈,不会随之后值变化
package main
import (
"fmt"
)
func main() {
n1 := 10
defer fmt.Println(n1) // 10
n1 = 20
fmt.Println(n1) // 20
}
len(str)
n,err:=strconv.Atoi("123")
str:=strconv.Itoa(123)
bytes:=[]byte("hello")
str:=string([]byte{97,98,99})
str:=strconv.FormatInt(123,2) // 数字转换二进制
b:=strings.Contains("seafood","foo")
couint:=string.Count("ceheese","e")
b:=strings.EqualFold("abc","ABC")
index:=strings.Index("NLT_abc","abc")
index:=strings.LastIndex("go golang","go")
strings.Replace("go go hello","go","golang",-1)
strArray:=strings.Split("hello,wprld,ok",",")
str:=strings.ToUpper("go")
str:=strings.Trim("!hello!","!")
str:=strings.TrimLeft("!hello!","!")
str:=strings.TrimRight("!hello!","!")
b:=strings.HasPrefix("http://abc.com","http")
b:=strings.HasSuffix("NLT_abd.jpg","jpg")
fmt.Printf 和 fmt.Sprintf
fmt.Sprintf("%d/%d/%", time.Now().Year(),time.Now().Month(),time.Now().Day())
time.Format
Fmt.Printf(time.Now().Format("2006-01-02"))
time.Sleep(5*1e9)
time.Sleep(5*time.Second)
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
time.Unix()
time.UnixNano()
package main
import "time"
import "fmt"
func main() {
var start, end int64
start = time.Now().Unix()
for i := 1; i < 1000; i++ {
time.Sleep(5 * time.Millisecond)
fmt.Println(i)
}
end = time.Now().Unix()
fmt.Println(end - start)
fmt.Println(time.Now()) // 2019-12-12 15:39:47.2357748 +0800 CST m=+0.003996201
fmt.Println(time.Now().Local()) // 2019-12-12 15:39:47.2547567 +0800 CST
fmt.Println(time.Now().Local().Unix()) // 1576136387
fmt.Println(time.Now().Local().Location()) // Local
fmt.Println(time.Now().UTC()) // 2019-12-12 07:39:47.2547567 +0000 UTC
fmt.Println(time.Now().UTC().Unix()) // 1576136387
fmt.Println(time.Now().UTC().Location()) // UTC
}
len:length:=len(str) 获取string、array、slice、map、channel长度
new:ptr:=new(int) 分配值类型,返回指针
make:ch:=make(chan int,2) 分配引用类型,返回类型对象
defer func(){
err:=recover()
if err!=nil{
fmt.Println(err)
}
}
package main
import "errors"
import "fmt"
func isFive(num int) error {
if num != 5 {
return errors.New("Not 5")
}
return nil
}
func main() {
err := isFive(6)
fmt.Printn(err)
}
package main
import "fmt"
func fbn(n int) int {
if n == 1 || n == 2 {
return 1
}
return fbn(n-2) + fbn(n-1)
}
func main() {
fmt.Println(fbn(7))
}
package main
import "fmt"
func f(n int) int {
if n == 1 {
return 3
}
return 2*f(n-1) + 1
}
func main() {
fmt.Println(f(7))
}
package main
import "fmt"
func f(n int) int {
if n == 10 {
return 1
}
return 2 * (f(n+1) + 1)
}
func main() {
fmt.Println(f(1))
}
package main
import "fmt"
func swap(n1, n2 *int) {
*n1, *n2 = *n2, *n1
}
func main() {
num1, num2 := 12, 15
fmt.Println(num1, num2)
swap(&num1, &num2)
fmt.Println(num1, num2)
}
package main
import (
"fmt"
"strings"
)
func makeSuffix(suffix string) func(string) string {
return func(name string) string {
if strings.HasSuffix(name, suffix) {
return name
}
return fmt.Sprintf("%s%s", name, suffix)
}
}
func main() {
fmt.Println(makeSuffix(".jpg")("abc"))
fmt.Println(makeSuffix(".jpg")("def.jpg"))
fmt.Println(makeSuffix(".txt")("jjj"))
fmt.Println(makeSuffix(".txt")("kkk.txt"))
}
package main
import "fmt"
func printPy(n int) {
for i := 1; i <= n; i++ {
for k := 1; k <= n-i; k++ {
fmt.Print(" ")
}
for j := 1; j <= 2*i-1; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
func main() {
printPy(10)
}