分类:go

9 篇文章

go map底层机制分析

基本数据结构// A header for a Go map.type hmap struct { // 元素个数,调用 len(map) 时,直接返回此值count intflags uint8// buckets 的对数 log_2B uint8// ove...

rpc调用文件格式

关于字段编码值 这个是是为了双方能够识别各自的字段,需要注意的是由于这个是为了识别同一个字段的,所以一个结构体中的字段编码值应当保持不同 #可能如果存在别名的话是可以相同的,待考证最好在1-16,否则会多占8位,传输会多一个字节类型定义后不可更改...

go并发模型研究

前言 go的所有并发模型都是由sync.Mutex提供的同步原语来实现的,底层则进一步依赖操作系统原语,比如Linux 中的 futex(快速用户空间互斥体)Mutex 几种状态未锁定(Unlocked):这种情况下任何goroutine都可以通过调用Lock方法来获取锁;已锁定(Locked):当...

go 随机字符串高效方法

也是docker containerd的生成方法func GetRandomString2(n int) string { randBytes := make([]byte, n/2) rand.Read(randBytes) return fmt.Sprintf("%x...

多态

实现方式1.通过接口来实现,即函数指定接口为参数时,所有实现了这个接口的对象都可以作为参数传入2.接口数组或者切片可以存放实现这个接口的所有不同类型的对象类型断言1.通过接口参数传进来的变量,如果需要将其赋给某个具体的值,需要执行断言操作,即 b=a.(B)  //B即是b的类型名,但是这种情况下,...

select关键字

它是一个控制结构,可以看成是只用于管道的switch,每个case都必须是管道操作,它将随机选取一个可运行的case,如果,所有都不可运行,则它将阻塞,它具备一下性质1.每个 case 都必须是一个通信2.所有 channel 表达式都会被求值3.所有被发送的表达式都会被求值 // 2和3总结下就是...

gin set-session不生效

主要原因少path    store.Options(sessions.Options{        MaxAge: 3600 * 3,        Path:  "/",    })...

静态编译

主要为了防止glibc版本不匹配$go build --ldflags "-extldflags -static" ...

关于panic

1.panic允许在defer中嵌套多次调用.程序多次调用 panic 也不会影响 defer 函数的正常执行,所以使用 defer 进行收尾工作一般来说都是安全的。2.panic只会触发当前groutine的defer...