无法在 mn 中访问导入包的导出变量
在 go 中,导入包时,包中导出的变量和函数都可以被访问。但是,有时访问导出变量会出现问题。
考虑以下代码:
- utils 包:
package utils import "fmt" var globalvar = 1
登录后复制
- main 包:
package main import ( "data_push/utils" ) func main() { fmt.println(utils.globalvar) }
登录后复制
上述代码会正确地打印 utils.globalvar 的值 1。
然而,如果在 utils 包的 init 函数中重新赋值了导出变量,就会出现问题:
package utils import "fmt" var globalvar = 1 func init() { globalvar = 2 }
登录后复制
登录后复制
此时,main 包中输出的 globalvar 值仍然是 1,而不是预期的 2。这是因为 init 函数中使用了 := 赋值,导致在 init 函数内创建了一个局部变量,覆盖了全局变量。
要解决此问题,可以在 init 函数中使用 = 赋值,这样可以更新全局变量的值。
package utils import "fmt" var globalvar = 1 func init() { globalvar = 2 }
登录后复制
登录后复制
修改后的代码可以正常在 main 函数中打印 globalvar 的值 2。
以上就是Go 中如何解决在 init 函数内修改导出变量无法生效的问题?的详细内容,更多请关注php中文网其它相关文章!