在 Go 编程语言中,为什么在导入包后,我仍然必须在该包中的方法前面加上包名?
IE
import "io/ioutil"
func main() {
content, err = iotuil.ReadFile("somefile.txt")
// etc..
}
这不是多余的吗?例如,在 Java 中,您可以在不导入的情况下执行导入Files.readAllLines
等操作Files
。
在 Go 编程语言中,为什么在导入包后,我仍然必须在该包中的方法前面加上包名?
IE
import "io/ioutil"
func main() {
content, err = iotuil.ReadFile("somefile.txt")
// etc..
}
这不是多余的吗?例如,在 Java 中,您可以在不导入的情况下执行导入Files.readAllLines
等操作Files
。
我想这并不能真正回答您的问题,但是如果您愿意,您实际上可以在不明确说明包的情况下调用方法 - 只需.
在名称前加上 a 导入(但不建议这样做;见下文):
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 的观点,即更好地阅读/了解事物的来源。
您可以导入和重命名包名称,例如:
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
)
我真的不能代表 Go 语言的设计者说话,但是能够快速分辨出你所调用的方法是在哪里定义的,这真是太好了。在文件顶部看到您正在使用的所有包的列表也很高兴。这不是多余的。
正如您所说,Java 要求您说Files.readAllLines
,同样,Go 要求您编写ioutil.ReadFile
.
go 中的 import 语句不像 java 中的,更像#include
是 c++ 中的。在go中,如果没有导入某些内容,则无法使用它。如果是导入的,你可以使用它,但必须以包名作为前缀。正如其他人所说,用于import . "packagename"
导入包而不必前缀。