Golang中如何不通过导入包名直接调用方法

Golang中如何不通过导入包名直接调用方法 是否厌倦了每次调用方法时都要在前面加上包名,比如 fmt.Println()

你可以在导入包时在前面加一个点 (.),像这样 import ( . "fmt" . "net\http" )

这样你就可以直接调用它们各自的方法,如 Println()handleFunc(),而无需加上包名。Go 编译器会理解其余的部分。

func main() {
    fmt.Println("hello world")
}
4 回复

这是常识,但我几乎从未见过有人使用它,这是有原因的。也许原因在于,看到 fmt.Println 比看到 Println 更清晰,这是一个不言而喻的惯例:假设任何没有包前缀的方法调用都是在调用当前包中定义的方法。

更多关于Golang中如何不通过导入包名直接调用方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


点导入。如果程序使用 import . "path" 导入一个标准包,未来版本中该导入包内定义的额外名称可能会与程序中定义的其他名称发生冲突。我们不建议在测试之外使用 import .,使用它可能导致程序在未来版本中无法编译。

Go Gopher Logo

Go 1 与 Go 程序的未来 - Go 编程语言

你好 @jerevick83,我理解你的观点以及你想让编写代码更高效的愿望。

然而,有一句 Go 谚语说:“清晰胜于巧妙。” Go 是一门“无聊”的语言,而这是一件好事。编写代码有时可能会变得乏味,这毫无疑问。但源代码被阅读的次数远多于被编写的次数,易于阅读远比节省几次击键重要得多。

Go 语言的明确性极大地有助于阅读和理解他人的代码。

在Go中确实可以通过点导入(dot import)来省略包名前缀,但需要谨慎使用。以下是具体实现方式:

package main

import (
    . "fmt"
    . "net/http"
)

func main() {
    // 直接调用fmt包的方法
    Println("Hello, World!")
    
    // 直接调用net/http包的方法
    HandleFunc("/", func(w ResponseWriter, r *Request) {
        Println("Request received")
    })
    
    ListenAndServe(":8080", nil)
}

点导入的注意事项:

  1. 可能导致命名冲突
  2. 降低代码可读性(难以判断方法来源)
  3. 不推荐在生产代码中使用

替代方案是使用短包名:

import (
    f "fmt"
    h "net/http"
)

func main() {
    f.Println("Using short names")
    h.HandleFunc("/", handler)
}

点导入主要用于测试场景,便于访问被测试包的导出标识符。

回到顶部