=Start=
缘由:
在阅读《Go语言程序设计》的字符串操作那一章时看到的内容,里面的代码挺实用的,就记录下来了;后来发现在Golang的Wiki里面有更为全面、详细的介绍/技巧:SliceTricks。
记录:
// 内置的 append() 函数接受一个切片和一个或者更多值,将参数中的值插入原始切片末尾,返回一个(可能是新的)切片 // 自定义切片插入位置的功能函数 func InsertStringSliceCopy(slice, insertion []string, index int) []string { result := make([]string, len(slice)+len(insertion)) at := copy(result, slice[:index]) at += copy(result[at:], insertion) copy(result[at:], slice[index:]) return result } // 自定义切片插入位置的功能函数2 func InsertStringSlice(slice, insertion []string, index int) []string { return append(slice[:index], append(insertion, slice[index:]...)...) } /* 在Go语言中删除切片中的元素: 删除切片开头、结尾的元素非常简单;从切片中间取元素也非常简单 从切片的中间删除元素就需要一点点技巧了(使用append将前后两部分拼接起来,并将值赋回给切片) */ // 自定义切片删除位置的功能函数 func RemoveStringSliceCopy(slice []string, start, end int) []string { result := make([]string, len(slice)-(end-start)) at := copy(result, slice[:start]) copy(result[at:], slice[end:]) return result } // 自定义切片删除位置的功能函数2 func RemoveStringSlice(slice []string, start, end int) []string { return append(slice[:start], slice[end:]...) }
参考链接:
=EOF=
《 “Go语言中的切片操作” 》 有 10 条评论
Golang程序的优化(Profiling Go)
http://www.integralist.co.uk/posts/profiling-go/
Go语言经典笔试题
https://github.com/goquiz/goquiz.github.io
https://goquiz.github.io/
`
语言规范
标准库和包
工具链
内部原理
参考资料
`
Go JSON 技巧
https://lingchao.xin/post/json-tips-in-go.html
https://golang.org/pkg/encoding/json/#RawMessage
使用Go语言标准库对CSV文件进行读写
https://xiequan.info/%E4%BD%BF%E7%94%A8go%E8%AF%AD%E8%A8%80%E6%A0%87%E5%87%86%E5%BA%93%E5%AF%B9csv%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E8%AF%BB%E5%86%99/
Slice 小技巧
http://blog.cyeam.com/golang/2018/06/18/slicetricks
快速理解Go数组和切片的内部实现原理
https://i6448038.github.io/2018/08/11/array-and-slice-principle/
https://blog.golang.org/go-slices-usage-and-internals
一个让业务开发效率提高10倍的golang库
https://mp.weixin.qq.com/s/rdzICm4JxpJ5MUrz9brA_w
https://www.cnblogs.com/yjf512/p/10818089.html
https://github.com/jianfengye/collection
`
Golang 适不适合写业务?
最近一个逻辑非常复杂的业务,我用 Golang 来开发。开发过程不断在问一个问题,Golang 适不适合写业务?
业务说到底,是一大堆的逻辑,大量的逻辑都是在几个环节:获取数据,封装数据,组织数据,过滤数据,排序结果。获取/封装数据,即从 DB 中根据查询 SQL,获取表中的数据,并封装成数据结构。组织数据,例如,当我有两份数据源,我需要将两份数据源按照某个字段合并,那么这种组织数据的能力也是非常需要的。过滤数据,我获取的字段有10个,但是我只需要给前端返回3个就够了;排序结果,返回的结构按照某种顺序。这些都是我们在写业务中,每个业务逻辑都会遇到的问题。一款适合做业务的语言一定是在这些环节上都提供足够的便利性的。
Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。
`
Go 语言数组和切片的原理
https://draveness.me/golang-array-and-slice
Go 语言中的 make 和 new
https://draveness.me/golang-make-and-new
slice 类型内存泄露的逻辑
https://xargin.com/logic-of-slice-memory-leak/
Go 101 总结了几个可能导致内存泄露的场景:
https://gfw.go101.org/article/memory-leaking.html
goroutine 阻塞在 channel,time.Ticker 不使用但未 stop,以及 for 循环里用 defer 导致泄露,这三个场景其实已经比较常见了,这里就不说了。
Dig101:Go之灵活的slice
https://mp.weixin.qq.com/s/r3ZJVdq0dTkA1xHinIVLUA
`
0x01 slice 到底是什么?
0x02 slice 能比较么?
0x03 花样的切片操作
0x04 append 时发生了什么?
0x05 append 内部优化
扩容的策略是什么?
扩容判断中`uint`的作用是啥?
内存清零初始化: memclrNoHeapPointers vs typedmemclr?
`