os.Args[1]
os.Args[2]
将标准库里日志类的输出,从默认的标准错误,设置为标准输出设备
log.SetOutput(os.Stdout)
Fatal 函数接受并将这个错误在终端窗口打印出来,随后终止程序
log.Fatal(err)
- 每个代码文件里的
init
函数都会在 main
函数执行前调用
- 以小写字母开头定义的变量是不公开的,其他包不能直接访问。大写字母开头是公开的。
- 简化变量声明运算符
:=
-
sync
包的 WaitGroup
跟踪所有的 goroutine
, 跟踪 goroutine
的工作是否完成。
WaitGroup
是一个计数信号量,可以利用它来统计所有的 goroutine
是不是都完成了工作。
var waitGroup sync.WaitGroup
设置需要等待处理的 goroutine 的数量,这里设置了5个,每个 goroutine 完成了工作,就会递减 WaitGroup 的计数值
waitGroup.Add(5)
for i:=0; i<5; i++ {
go func(){pass}()
waitGroup.Done() 递减 goroutine 的计数
}
go func() {
等待所有任务完成
waitGroup.Wait() 这个方法会导致goroutine阻塞,直到 WaitGroup 内部的计数到达0
close(results) 关闭通道
}
fmt.Println(程序终止)
一旦关闭了通道 close(results) ,for _ := range results {} 循环就会终止
-
range
可以用来迭代 数组、字符串、切片、映射和通道
- 查找
map
里的键时
方法一
value := map['key']
方法二
value, exists := map['key'] 如果有键 exists 为 true,没有为 false
-
指针变量
可以方便的在函数之间共享数据
在Go语言中,所有的变量都以值的方式传递
- 声明常量
const dataFile = "data/data.json"
- 解析统一结构类型的 json 列表
type Feed struct {
Name string `json:"site"`
URI string `json:"link"`
Type string `json:"type"`
}
var feeds []*Feed
err = json.NewDecoder(file).Decode(&feeds)
func (dec *Decoder) Decode (v interface{}) error
-
interface
声明一个接口,这个接口声明了结构体类型需要实现的行为
如果接口类型只包含了一个方法,那么这个类型的名字以 er
结尾
如果要让一个用户定义的类型实现一个接口,用户定义的类型要实现接口类型里声明的所有方法