"A Tour of Go"指南说:
此代码将导入分组为带括号的“分解的”导入语句。
import ( "fmt" "math" )
您还可以编写多个导入语句,例如:
import "fmt" import "math"
但是使用分解式import语句是一种很好的样式。
正如我在看过的各种Go演讲中所记得的那样,Go编程语言以它是一种简单易用的语言而自豪,它没有十种不同的方法来完成一件事情。
为什么有多种解决方案可以做同一件事?在任何情况下,只有第二种方法起作用并且分解式导入语句不能解决特定问题吗?
答案 0 :(得分:2)
正如其他人所指出的,两种形式都可以在所有情况下使用。
几乎所有顶级标识符(import
,var
,const
和type
)都可以进行此分组,其目的是为您提供可能性< em>以更好地组织标识符并对其进行逻辑分组。 (请注意,您还可以在函数内部分组,而不仅仅是在顶层。)
在import
的情况下,诸如gofmt
之类的工具将首先按来源(无论是否为标准lib)在组内订购进口商品,然后按字母顺序按进口路径订购进口商品,但它们不会在组之间或组本身之间进行重组。
对于const
,它还有另一个意义:关键字const
重置iota
预先声明的标识符,因此在使用iota
时正确地对常量进行分组至关重要。
除此之外,没关系,您可以使用两种形式。根据标识符的含义以及它们如何相互连接对标识符进行分组。例如,将sync.Mutex
与应该保护的变量分组也很方便:
var (
mu sync.Mutex
protectMe int
)
func getMe() int {
mu.Lock()
me := protectMe
mu.Unlock()
return me
}
func setMe(me int) {
mu.Lock()
protectMe = me
mu.Unlock()
}
(示例取自How to make a variable thread-safe。)
正如我在看过的各种Go演讲中所记得的那样,Go编程语言以它是一种简单易用的语言而自豪,它没有十种不同的方法来完成一件事情。
不要以错误的方式来解释。两种导入方式相同,只是格式不同。两者都指定相同的一组导入软件包。仅仅因为一种语言允许您以两种方式添加a
和b
,例如a+b
和b+a
,并不意味着可以用多种方式表示简单的加法。