在Go [duplicate]中打印env变量时为空字节片

dkqlctbz  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(96)

此问题已在此处有答案

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)
}

个字符

hjzp0vay

hjzp0vay1#

从以下位置更改测试包函数:

var secret = []byte(os.Getenv("SECRET"))

func Init() {
    fmt.Println(secret)
}

字符串

to

func Init() {

    var secret = []byte(os.Getenv("SECRET"))
    fmt.Println(secret)
}


在第一个代码片段中,变量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]

相关问题