共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。
Golang 变量定义, Golang 变量初始化, Golang 指针
在使用 Golang 进行变量定义时,有时会遇到一些令人困惑的情况。本文将通过一个实例来说明其中的坑,并提供解决方案。
首先,我们来看一下文件结构:
.
├── a
│ └── a.go
├── b
│ └── b.go
├── go.mod
└── main.go
a.go 内容如下:
package a
var Hello = "a"
func NewHello() {Hello = "aa"}
b.go 内容如下:
package b
import (
"fmt"
"one/a"
)
var World = a.Hello
func NewWorld() {fmt.Printf(World)
}
main.go 内容如下:
package main
import (
"one/a"
"one/b"
)
func main() {a.NewHello()
b.NewWorld()}
在上述代码中,我们主要关注 b.go 文件。根据我的理解,在 main 函数中实例化程序时,首先实例化 a 包,然后再实例化 b 包。因此,我们期望在 b 包中输出的结果应该是 “aa”,但实际上输出的结果却仍然是 “a”。
这个问题的关键在于 Golang 是一种编译型语言。在变量初始化时,如果有赋值操作,编译器会直接将其视为已知值。此外,Golang 中的变量都是采用值传递方式,意味着对于重新定义的变量,在程序运行过程中所做的修改不会影响到它们。
因此,我们需要对 b.go 进行修改:
var World = &a.Hello
func NewWorld() {fmt.Printf(*World)
}
通过获取原变量的指针地址,并以指针的方式访问原变量的数据值,即可解决这个问题。
实际上,如果这两个变量的定义都放在同一个文件中,很可能就不会犯这种错误。然而,当我们将它们分别放在两个独立的程序文件中后,竟然没有意识到这一点。
文章来源:https://www.toymoban.com/diary/golang/613.html
通过本文的案例,我们看到了 Golang 变量定义时的一个陷阱,并提供了解决方法。希望这能帮助读者更好地理解和使用 Golang 中的变量定义。文章来源地址 https://www.toymoban.com/diary/golang/613.html
到此这篇关于 Golang 变量定义的陷阱 (注意事项) 及解决方法的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!
原文地址:https://www.toymoban.com/diary/golang/613.html
如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!