go语言基础
目录
1. 标准库
标准库math中定义了各种数字类型的取值范围
const (
MaxInt8 = 1<<7 - 1
MinInt8 = -1 << 7
MaxInt16 = 1<<15 - 1
MinInt16 = -1 << 15
MaxInt32 = 1<<31 - 1
MinInt32 = -1 << 31
MaxInt64 = 1<<63 - 1
MinInt64 = -1 << 63
MaxUint8 = 1<<8 - 1
MaxUint16 = 1<<16 - 1
MaxUint32 = 1<<32 - 1
MaxUint64 = 1<<64 - 1
)
2. 三种内置引用类型
slice/map/channel
3. make和new区别
- 内置函数new按制定类型长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式;
- 引用类型必须使用make函数创建,编译器将make转换为目标类型专用的创建函数,以确保完成全部内存分配和相关属性初始化;
4. 延迟调用
延迟调用注册的是调用,必须提供执行所需参数.参数值在注册时被复制并缓存起来.如对状态敏感,可改用指针或闭包.
func main(){
x, y := 1, 2
defer func(a int){
fmt.Println("defer x, y = ", a, y) // y为闭包引用
}(x) // 注册时复制调用参数
x += 100
y += 200
fmt.Println(x, y)
}
输出
101 202
defer x, y = 1, 202
5. panic和recover
6. 内存对齐
对齐的原因与硬件平台,以及访问效率有关.某些平台只能访问特定地址,比如只能是偶数地址.而另一方面,CPU访问自然对齐的数据所需的读周期最少,还可避免拼接数据.
// slice本身并非动态数组或数组指针.它内部通过指针引用底层数组,设定相关属性将数据读写操作限定在制定区域内.
type slice struct{
array unsafe.Pointer
len int
cap int
}
7. golang中安全读写共享变量的方法?
- sync.Mutex - 加锁
- chan - 以通信来共享内存
8. 无缓冲chan的发送和接收是否同步?
ch := make(chan int) // 无缓冲channel
ch := make(chan int, 5) // 有缓冲channel
- 无缓冲channel发送和接收需要同步
- 有缓冲channel,缓冲未满时不要求同步,当缓冲满时写阻塞,当缓冲空时读阻塞;

浙公网安备 33010602011771号