在Go中,如何直接导入函数,而不需要在调用时加上包名前缀?

lnxxn5zx  于 2023-11-14  发布在  Go
关注(0)|答案(5)|浏览(155)

在Go编程语言中,为什么在导入一个包之后,我仍然需要在该包中的一个方法前面加上包名?

import "io/ioutil"

func main() { 
    content, err = iotuil.ReadFile("somefile.txt")
    // etc..
}

字符串
例如,在Java中,你可以在不导入Files的情况下,做诸如导入Files.readAllLines之类的事情。

lndjwyie

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的观点,更好地阅读/查看东西来自哪里。

axzmvihb

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

nhhxz33t

nhhxz33t3#

我不能代表Go语言的设计者,但是能够快速地告诉你正在调用的方法是在哪里定义的是很好的。在文件的顶部看到你正在使用的所有包的列表也很好。这不是多余的。
正如你所说的,Java要求你写Files.readAllLines,类似地,go要求你写ioutil.ReadFile

ymdaylpp

ymdaylpp4#

go中的Import语句不像java,更像c++中的#include。在go中,如果没有导入的东西,你不能使用它。如果导入了,你可以使用它,但必须以包名为前缀。正如大家所说,使用import . "packagename"导入包,不必前缀。

bttbmeg0

bttbmeg05#

您可以在包中定义一个(函数)变量(在包级别定义,使用“var”关键字),并将所需的名称设置为导入的函数。示例:
第一个月

相关问题