var f string = "Runoob" 简写为 f := "Runoob"
变量 f 之前未被声明过,只能用在函数体内,不可用于全局变量的声明与赋值
Go函数可以返回多个值 : return 1,2
如果接口只包含一个方法,接口名字要以er结尾。例:type Matcher interface{}
同一个目录下的所有.go文件必须声明同一个包名
Import 编译器先在GO的安装目录找(标准库源),然后才在GOPATH变量目录找(个人工作空间);其中一个满足就停止继续查找。
方法
type user struct{
Email string
}
值接收者使用值的副本来调用方法
Func (u user) notify(){
}
指针接收者使用实际值来调用方法
Func (u *user) changeEmail(){
}
并发 : 原子函数 , 互斥锁, 通道 保证对共享资源的安全访问。
原子函数: atomic.AddInt64(&a , 1) // 安全的对 a 加 1
互斥锁:同一时间只有一个goroutine 可以执行临界区代码块
Mutex.lock() // 加锁
{代码块}
Mutex.Unlock() // 释放锁
通道:在goroutine 之间架起管道,并提供了确保同步交换数据对机制。
Unbuffered := make(chan int) // 无缓冲整型通道
Buffered := make(chan string , 10) // 有缓冲字符串通道
并发模式:
Runner :控制程序的生命周期
Pool : 管理可复用的资源池
Work : 创建可以处理任务的goroutine池