float转int报错
必须使用变量作为中介-
append
当切片容量足够时,进行append操作,会引起原切片数据变化。func test() { nums := []int{1, 2, 3} _ = append(nums[:2], 4) fmt.Println("test1:", nums)输出:
test: [1 2 4] 深度拷贝map、struct
用json.unmarshal,变成字符串,然后再用 json.marshal生成新的map/struct-
拷贝interface
基于序列化和反序列化func deepCopy(dst, src interface{}) error { var buf bytes.Buffer if err := gob.NewEncoder(&buf).Encode(src); err != nil { return err } return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) } -
拷贝slice
预分配足够空间,然后用拷贝函数copyData := make([]int, elementCount) copy(copyData, srcData) 比较interface
先比较动态类型,再比较值;
或者比较struct
reflect.DeepEqual为什么 go 能支持调度上百万个 goroutine ?调度器原理是什么?
协程,开销小-
优雅关闭channel及判断
type MyChannel struct { C chan T closed bool mutex sync.Mutex } func NewMyChannel() *MyChannel { return &MyChannel{C: make(chan T)} } func (mc *MyChannel) SafeClose() { mc.mutex.Lock() defer mc.mutex.Unlock() if !mc.closed { close(mc.C) mc.closed = true } } func (mc *MyChannel) IsClosed() bool { mc.mutex.Lock() defer mc.mutex.Unlock() return mc.closed } 假如某一个 http 请求会有以下四个 goroutine 的调用链,如何通知这四个 goroutine 退出?有什么比较好的方案?
context包
当通过父Context对象创建子Context对象时,可同时获得子Context的一个撤销函数,这样父Context对象的创建环境就获得了对子Context将要被传递到的Goroutine的撤销权.
在子Context被传递到的goroutine中,应该对该子Context的Done信道(channel)进行监控,一旦该信道被关闭(即上层运行环境撤销了本goroutine的执行),应主动终止对当前请求信息的处理,释放资源并返回.channel 和锁分别用在什么情况下?二者性能差异如何?
channel用于传数据,锁控制并发
锁的性能是channel的3倍左右struct{}场景
节省内存(map、channel)
封装
golang小记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- //Clojure入门教程: Clojure – Functional Programming for the J...
- 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...