反转
func Reversing(s []int64) []int64 {
for left, right := 0, len(s)-1; left < right; left, right = left+1, right-1 {
s[left], s[right] = s[right], s[left]
}
return s
}
分块
主要用于当单个切片过大,需要分多次使用的时候,比如网络调用等。
func SliceChunk(s []int64, size int) [][]int64 {
var ret [][]int64
for size < len(s) {
// s[:size:size] 表示 len 为 size,cap 也为 size,第二个冒号后的 size 表示 cap
s, ret = s[size:], append(ret, s[:size:size])
}
ret = append(ret, s)
return ret
}
类型转换
RPC 中,不同下游接收的类型可能不一样,还有自定义类型,这里提供一个快速转换的方法
s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var newS []int64
// 做法是利用 reflect 直接替换数据指针
// 但是这个不保证在以后的版本中一直可用 ╮(╯▽╰)╭
*(*reflect.SliceHeader)(unsafe.Pointer(&newS)) = *(*reflect.SliceHeader)(unsafe.Pointer(&s))
fmt.Printf("type:%T value:%v", newS, newS)
主要参考:https://github.com/golang/go/wiki/SliceTricks
官方使用技巧,建议多看看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。










