为什么在初始化后,Golang的切片是空的?

huangapple go评论94阅读模式
英文:

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)

huangapple
  • 本文由 发表于 2017年2月9日 22:01:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/42138710.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定