作者:枝玫焰 | 来源:互联网 | 2023-05-17 14:19
在golang中,有数组和切片两种类型.切片是引用类型,而数组是值类型.如果想在函数中传入数组的指针参数,则必须指定数组的数量,如funcstringToRuneArr(sst
在golang中, 有数组和切片两种类型. 切片是引用类型,而数组是值类型. 如果想在函数中传入数组的指针参数, 则必须指定数组的数量, 如
func stringToRuneArr(s string, arr *[5]rune)
如果去掉 arr *[5]rune 中的5, 则指参数变成了切片类型, 数组的指针就传不进去了, 编译会报错, 那么难道一定要写死数组的长度吗? 这样也太不优雅.
经过一番搜索, 发现其实方法很简单, 就是把函数的参数改为切片, 然后传数组的切片进去. 因为切片是引用类型, 实际在函数中的修改是对应的原来的数组, 这样就达到了修改数组的目的, 只要修改不超出数组的长度,就没有问题.
代码例子如下:
func StringToRuneArr(s string, arr []rune) {
src := []rune(s)
for i, v := range src {
if i >= len(arr) {
break
}
arr[i] = v
}
}
func main(){
str := "这是一个字符串ABCDEF"
var arr [10]rune
utility.StringToRuneArr(str, arr[:])
fmt.Println(string(arr[:]))
}
输出结果 这是一个字符串ABC