多个语句比分解导入语句更好的情况?

时间:2019-08-06 14:25:14

标签: go import formatter

"A Tour of Go"指南说:

  

此代码将导入分组为带括号的“分解的”导入语句。

import (
    "fmt"
    "math"
)
     

您还可以编写多个导入语句,例如:

import "fmt"
import "math"
     

但是使用分解式import语句是一种很好的样式。

正如我在看过的各种Go演讲中所记得的那样,Go编程语言以它是一种简单易用的语言而自豪,它没有十种不同的方法来完成一件事情。

为什么有多种解决方案可以做同一件事?在任何情况下,只有第二种方法起作用并且分解式导入语句不能解决特定问题吗?

1 个答案:

答案 0 :(得分:2)

正如其他人所指出的,两种形式都可以在所有情况下使用。

几乎所有顶级标识符(importvarconsttype)都可以进行此分组,其目的是为您提供可能性< 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编程语言以它是一种简单易用的语言而自豪,它没有十种不同的方法来完成一件事情。

不要以错误的方式来解释。两种导入方式相同,只是格式不同。两者都指定相同的一组导入软件包。仅仅因为一种语言允许您以两种方式添加ab,例如a+bb+a,并不意味着可以用多种方式表示简单的加法。