在Go编程语言中,为什么在导入一个包之后,我仍然需要在该包中的一个方法前面加上包名?即
import "io/ioutil" func main() { content, err = iotuil.ReadFile("somefile.txt") // etc.. }
字符串例如,在Java中,你可以在不导入Files的情况下,做诸如导入Files.readAllLines之类的事情。
Files
Files.readAllLines
lndjwyie1#
我想这并没有真正回答你的问题,但是如果你愿意,你可以在不显式地声明包的情况下调用这些方法--只需要在名字前面加上一个.就可以了(但是不推荐这样做;见下文):
.
package main import ( . "fmt" . "io/ioutil" ) func main () { content, err := ReadFile("testfile") if err != nil { Println("Errors") } Println("My file:\n", string(content)) }
字符串请注意@jimt下面的评论-这种做法是不建议测试之外,因为它可能会导致与未来版本的名称冲突。此外,绝对同意@DavidGrayson的观点,更好地阅读/查看东西来自哪里。
axzmvihb2#
您可以导入并重命名软件包名称,例如:
import ( . "fmt" // no name, import in scope File "io/ioutil" // rename ioutil to File _ "net" // net will not be available, but init() inside net package will be executed )
字符串另见https://golang.org/ref/spec#Import_declarations
nhhxz33t3#
我不能代表Go语言的设计者,但是能够快速地告诉你正在调用的方法是在哪里定义的是很好的。在文件的顶部看到你正在使用的所有包的列表也很好。这不是多余的。正如你所说的,Java要求你写Files.readAllLines,类似地,go要求你写ioutil.ReadFile。
ioutil.ReadFile
ymdaylpp4#
go中的Import语句不像java,更像c++中的#include。在go中,如果没有导入的东西,你不能使用它。如果导入了,你可以使用它,但必须以包名为前缀。正如大家所说,使用import . "packagename"导入包,不必前缀。
#include
import . "packagename"
bttbmeg05#
您可以在包中定义一个(函数)变量(在包级别定义,使用“var”关键字),并将所需的名称设置为导入的函数。示例:第一个月
5条答案
按热度按时间lndjwyie1#
我想这并没有真正回答你的问题,但是如果你愿意,你可以在不显式地声明包的情况下调用这些方法--只需要在名字前面加上一个
.
就可以了(但是不推荐这样做;见下文):字符串
请注意@jimt下面的评论-这种做法是不建议测试之外,因为它可能会导致与未来版本的名称冲突。此外,绝对同意@DavidGrayson的观点,更好地阅读/查看东西来自哪里。
axzmvihb2#
您可以导入并重命名软件包名称,例如:
字符串
另见https://golang.org/ref/spec#Import_declarations
nhhxz33t3#
我不能代表Go语言的设计者,但是能够快速地告诉你正在调用的方法是在哪里定义的是很好的。在文件的顶部看到你正在使用的所有包的列表也很好。这不是多余的。
正如你所说的,Java要求你写
Files.readAllLines
,类似地,go要求你写ioutil.ReadFile
。ymdaylpp4#
go中的Import语句不像java,更像c++中的
#include
。在go中,如果没有导入的东西,你不能使用它。如果导入了,你可以使用它,但必须以包名为前缀。正如大家所说,使用import . "packagename"
导入包,不必前缀。bttbmeg05#
您可以在包中定义一个(函数)变量(在包级别定义,使用“var”关键字),并将所需的名称设置为导入的函数。示例:
第一个月