Golang Go语言中导入包的作用域是怎样的?

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言中导入包的作用域是怎样的?
A 包中有个全局变量 Student,在主函数中导入这个包,给 Studnet 赋一个值。在 B 包中导入 A 包,就可以获取这个值。
我理解的一般函数,调用完就销毁了。


很多包在调用之前都需要传入一些参数,可以用 init 函数或者自己写一个初始化函数,在主函数中调用这个初始化函数。

所以我问一下这个导入包的作用域。

6 回复

函数没有销毁不销毁,因为函数是幂等的,无状态的
你的问题是主函数导入并赋值,在 B 包中导入后可以获取
其实你都说了这个是全局变量,赋值和读取都在同一进程里,如果读不到才有问题吧

更多关于Golang Go语言中导入包的作用域是怎样的?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


“调用完就销毁了”的是这个函数调用的 activation record,不是函数自己
楼主这个问题让我怀疑是否有一些人的脑子是 purely functional 的 …

你在说啥?
函数销毁是啥?
包的作用域又是啥?

一个程序,同一个 import path 表示的包,就只有一个实例,并不会有多个包,不管包之间怎么依赖,A 就是唯一的 A,所有包里的 A,都是同一个 A,改变 A 的全局变量,那所有用到 A 的包,都会观察到这个改变。

很多教程都没提到这点,我开始以为导入包像函数调用一样。

原来如此……

在Golang(Go语言)中,导入包的作用域主要遵循以下几个关键点:

  1. 包级作用域:当你导入一个包时,该包中导出的(即首字母大写的)标识符将可在当前文件的包级作用域内被访问。这意味着你可以在函数外部直接引用这些标识符,比如类型、变量、常量以及函数等。

  2. 别名使用:通过import 包路径 别名的语法,你可以为导入的包指定一个别名,这样在使用该包的标识符时,需要使用这个别名作为前缀。这有助于解决包名冲突或简化长包名的引用。

  3. 局部作用域:虽然Go语言不支持直接在函数内部导入包(导入语句必须位于文件的顶部),但你可以通过定义局部变量或函数参数来间接实现类似局部作用域的效果,将包中的功能封装在函数或变量中,限制其作用范围。

  4. 隐式导入:某些包(如fmtos等)在标准库中非常常见,但并非所有导入的包都会直接体现在代码的每个角落。例如,初始化函数(init)可能会导入并使用其他包,而不影响文件顶部声明的导入列表。

总之,Go语言中的导入包作用域是全局(包级)的,但通过别名和封装技术,你可以灵活地控制其使用范围,以适应不同的编程需求。

回到顶部