s := make([]string, 3) s[0] = "a" s[1] = "b" s[2] = "c" fmt.Println("get:", s[2]) // c fmt.Println("len:", len(s)) // 3
s = append(s, "d") s = append(s, "e", "f") fmt.Println(s) // [a b c d e f]
range使用
1 2 3 4 5 6 7 8 9
nums := []int{2, 3, 4} sum := 0 for i, num := range nums { sum += num if num == 2 { fmt.Println("index:", i, "num:", num) // index: 0 num: 2 } } fmt.Println(sum) // 9
用来更灵活的遍历集合元素
方法
返回值在后面,先变量名再变量类型
1 2 3 4 5 6 7 8 9 10 11 12
funcadd(a int, b int)int { return a + b }
funcadd2(a, b int)int { return a + b }
funcexists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok }
funcfindUser(users []user, name string) (v *user, err error) { for _, u := range users { if u.name == name { return &u, nil } } returnnil, errors.New("not found") }
src := make(chanint)//无缓冲信道 dest := make(chanint, 3)//有缓冲信道 gofunc() { deferclose(src) for i := 0; i < 10; i++ { src <- i } }() gofunc() { deferclose(dest) for i := range src { dest <- i * i } }()
并发安全Lock
1 2 3
lock:=sync.Mutex{//语句} lock.Lock() lock.Unlock()
WaitGroup 类似于Java的CountDown和Semaphore
计数器 开启协程+1;执行结束-1;主协程阻塞直到计数器为0。
依赖管理
GOPATH->Go Vender->GO Module
依赖管理三要素 1.配置文件,描述依赖 go.mod 2.中心仓库管理依赖库 Proxy 3.本地工具 go get/mod