变量声明
- 短变量声明 :=
- 常量声明 const
- 变量声明 var
- 变量提升(和js一样)
- 类型推导
go
var 变量名称 第三方返回值
- 指针类型
go
var 变量名称 *值类型
数据类型
整数型,浮点型,复数,布尔,字符串
函数声明
go
// 函数名称-形参类型-返回值类型
fun uname(uname string) string {
}
- 多个参数
go
// 函数名称-形参类型-返回值类型
fun uname(uname ...string) string {
}
几个比较重要的函数名称 init defer main启动函数,以及闭包
结构体
go
type 结构名称A struct {
uname string
}
- go语言没有继承概念,只有组合概念
go
type 结构名称B struct {
结构名称A 结构类型 映射字段(常见的有JSON映射和SQL映射)
}
- go语言没有set/get概念
go
func (结构体接收器 结构体名称) 函数名称(形参名称 形参类型){
结构体名称.uname=形参名称
}
- 使用
go
func main(){
变量名称 := 结构体B{uname : "张三"}
变量名称.函数名称()
}
接口(类似于多态概念,编译类型这种概念)
go
type 接口名称 interfance {
结构体() 返回值类型
}
type 结构体 struct {
uname string
}
func (接收器 结构体名称) 函数名称() 返回值类型 {
return 结构体.uname
}
func 普通函数名称(参数名称 接口名称){
// 输出
}
func main(){
变量名称 := 结构体{uname : "小明"}
普通函数(变量名称)
}
- 这里有个概念叫空interfance{},代表任何值
值传递与引用传递
go语言默认是值传递
值传递和引用传递区别
- 值传递是拷贝地址
- 引用传递是同一地址 用 * 关键字
锁
go
var mu = Sync.Mutex
// 加锁
mu.Lock()
// 解锁
mu.unLock()
- Sync.RWMutex 读写分离锁
WaitGroup与channel
- WaitGroup
go
var wg Sync.WaitGroup
wg.Done()
wg.Add()
Wg.Wait()
- channel通道
go
channel := make(chan,2)
<- 这个是数据流操作符
- goroutine
go
go 函数名(){
}()
线程安全集合
- sync.map
读写文件
- os.readFile 读取文件
- os.writeFile 写文件
异常处理
for循坏
- 死循环之一
go
for {
Select {
case 接受数据 <- 发送数据
default
}
}
- 死循环之一
go
for true {}
- range 求和
make字段
- 切片用途
- map集合使用
- channel通道定义,这里有个关键字段chan