英文:
Why golang slice is empty after initialization?
问题
在另一个函数中,当切片是文件全局变量时,为什么切片为空?
这是一段代码:
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}]
[]
这是一个 repl.it 的链接,如果你想看一下。
谢谢你的帮助。
英文:
My question here is why the slice is empty in another func when the slice is global to the file?
Here's a piece of code:
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)
}
Output:
[{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 is a repl.it link too, if you want to take a look.
Thanks for your kind help.
答案1
得分: 4
你在这里重新定义了它:
a := make([]Vec3, 0)
如果要使用相同的变量,你应该使用=
赋值,而不是使用:=
声明一个新变量。
a = make([]Vec3, 0)
短变量声明
> 在函数内部,可以使用:=
短赋值语句来代替具有隐式类型的var声明。
英文:
You have redefined it here:
a := make([]Vec3, 0)
To use the same variable you should assign a value with =
but not declare a new variable with :=
a = make([]Vec3, 0)
###Short variable declarations
> Inside a function, the := short assignment statement can be used in place of a var declaration with implicit type.
答案2
得分: 3
你正在重新声明变量a,所以实际上你没有初始化全局变量。尝试使用以下代码:
a = make([]Vec3, 0)
英文:
You are re declaring a, so actually you not initializing the global var, try:
a = make([]Vec3, 0)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论