我的问题是,当切片对文件是全局的时,切片在另一个func中为空?
这是一段代码:
package main
import "fmt"
type Vec3 struct {
x float32
y float32
z float32
}
var a []Vec3
func main() {
a := make([]Vec3, 0)
a = append(a, Vec3{2.0, 3.0, 4.0})
a = append(a, Vec3{3.4, 5.6, 5.4})
a = append(a, Vec3{6.7, 4.5, 7.8})
fmt.Printf("%+v\n", a)
doSomethingWithA();
}
func doSomethingWithA() {
fmt.Printf("%+v\n", a)
}
输出:
[{x:2 y:3 z:4} {x:3.4 y:5.6 z:5.4} {x:6.7 y:4.5 z:7.8}]
[]
This也是一个repl.it链接,如果你想看看。
感谢您的帮助。
答案 0 :(得分:4)
您已在此处重新定义:
a := make([]Vec3, 0)
要使用相同的变量,您应该使用=
分配值,但不要使用:=
声明新变量
a = make([]Vec3, 0)
在函数内部,可以使用:= short赋值语句代替具有隐式类型的var声明。
答案 1 :(得分:3)
您正在重新声明a,所以实际上您没有初始化全局变量,请尝试:
a = make([]Vec3, 0)