Go(java基础)
- 当一个空指针,没有内存地址的时候,你去操作其就会报错
go
var p *int
p = new(int)
*p = 20
-
函数可以看作一种特殊的数据类型来使用
-
go的函数形参是值传递,不是引用传递,区别很大,但也可以传地址
-
方法名和变量名的大小写表示public和private
-
循环语句有且只有 for 循环
-
if 语句的格式要求严格
-
切片是对一个数组的一个连续片段的引用,所以切片是一个引用类型
- 切片的零值为nil
- slice[开始:结束] 左闭右开
- 切片的内部结构包含地址、len和cap,切片一般用于快速操作一块数据集合
-
切片复制(copy)
- 这里是深拷贝
- 深拷贝是值拷贝,浅拷贝是地址拷贝
-
切片扩容(append)类似redis的。。。。。
-
make仅用于创建slice、map和channel,分配内存并初始化
-
map
- map是引用类型,零值是nil,必须初始化才能使用
- 也是个动态集合,有相应的扩容机制
-
接口
- 也是只含有方法,且没有方法体
- 继承关系是隐式的
- 继承必须实现接口的所有方法
-
空接口(any),类似java的Object
- 任何类型都实现了空接口
- 所以any类型的变量可以赋任何类型的值
-
编程中,并发、并行都可以叫做并发
-
用go关键字就可以开启协程,gorountine中的任务会、
-
合理地分配给每个CPU,轻松实现高并发
-
go协程之间通过Channel(通道)实现通信
-
go的并发模型是CSP(Communicating Sequential Process),提倡通过通信共享内存 ,而不是通过共享内存来实现通信
- 要知道通过共享内存(如全局变量)来通信,容易引发竞态问题,需要进行加锁操作,会造成性能问题
-
channel始终特殊类型(引用类型),像是一个队列,遵循先进先出的规则,保证了收发数据的顺序。每一个通道都是一个具体类型的导管,所以声明channel时需要为其指定元素类型
go
var 变量名称 chan 类型
go
make(chan 元素类型, [缓冲大小])//缓冲大小可选
-
Go应用本质上是一组Go包的集合
-
go.mod属于是go的依赖管理工具
-
err是一种接口
-
defer关键字, 用于延迟调用
可选
- Go应用本质上是一组Go包的集合
- go.mod属于是go的依赖管理工具
- err是一种接口
- defer关键字, 用于延迟调用