此问题已在此处有答案:
Understanding variable scope in Go(2个答案)
29天前关闭
我在Go中有两个包,在打印secret
变量的值时遇到了一个问题。当我尝试使用fmt.Println(secret)
打印它时,它显示一个像[]
这样的空字节切片。这种行为正常吗?
下面是两个包中的代码示例:
package test
import (
"fmt"
"os"
)
var secret = []byte(os.Getenv("SECRET"))
func Init() {
fmt.Println(secret)
}
个字符
1条答案
按热度按时间hjzp0vay1#
从以下位置更改测试包函数:
字符串
to
型
在第一个代码片段中,变量secret在Init函数外部声明,这意味着它是一个包级变量,可以由同一个包中的任何函数访问。当调用Init时,它只是打印先前在函数外部分配的secret的值。
在第二个代码片段中,变量secret在Init函数中声明,这意味着它是一个局部变量,只能在Init函数本身中访问。当调用Init时,它将
os.Getenv("SECRET")
的值赋给secret变量,然后打印它。因此,这两个代码段之间的主要区别在于secret变量的作用域。如果只需要在Init函数中使用secret,最好在函数中声明它,以避免不必要的变量使包级作用域变得混乱。另一方面,如果需要在同一个包中的多个函数中使用secret,则将其声明为包级变量可能是有意义的。
Output
:[83 84 65 67 75 79 86 69 82 70 76 79 87]