我试图将字符串数组传递给函数,打印值,修改它,然后在函数完成时打印字符串数组的值。
这是我的示例代码,它不起作用但展示了我想要实现的目标:
package main
import (
"fmt"
)
func SendData(a *[]string) {
fmt.Println(*a)
*a = *a[:0]
}
func main() {
var s []string
s = append(s, "dat","boi")
SendData(&s)
fmt.Println(s)
}
这是编译时的错误:cannot slice a (type *[]string)
要修复错误,只需将 *a[:0]
更改为 (*a)[:0]
即可获取指针指向的对象,并且然后 slice 该对象,而不是尝试 slice 指针。
接下来是我的看法:
但是您不需要参数上的 *
, slice 包含指向底层数组的指针,因此 slice 的副本指向同一个数组。如果您要为 slice 变量分配另一个东西,我建议返回新的 slice,如下所示:
package main
import (
"fmt"
)
func SendData(a []string) []string {
fmt.Println(a)
a = a[:0]
return a
}
func main() {
var s []string
s = append(s, "dat","boi")
s = SendData(s)
fmt.Println(s)
}