Golang 变量定义的陷阱(注意事项)及解决方法

10,505次阅读
没有评论

共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。

Golang 变量定义, 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)
}

通过获取原变量的指针地址,并以指针的方式访问原变量的数据值,即可解决这个问题。

实际上,如果这两个变量的定义都放在同一个文件中,很可能就不会犯这种错误。然而,当我们将它们分别放在两个独立的程序文件中后,竟然没有意识到这一点。

通过本文的案例,我们看到了 Golang 变量定义时的一个陷阱,并提供了解决方法。希望这能帮助读者更好地理解和使用 Golang 中的变量定义。文章来源地址 https://www.toymoban.com/diary/golang/613.html

到此这篇关于 Golang 变量定义的陷阱 (注意事项) 及解决方法的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/golang/613.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1188字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)