Go 为什么使用简写语法来声明/init变量?

Go 为什么使用简写语法来声明/init变量?,go,Go,这两种类型的变量声明/初始化之间有区别吗 package main import "fmt" func main() { var a = "I am a string" // Declare + init (infer) fmt.Println(a) b := "I am a string" // Declare + init (shorthand) fmt.Println(b) } 我看不到速记语法的附加值,倾向于在整

这两种类型的变量声明/初始化之间有区别吗

package main

import "fmt"

func main() {

    var a = "I am a string"        // Declare + init (infer)
    fmt.Println(a)

    b := "I am a string"           // Declare + init (shorthand)
    fmt.Println(b)
}

我看不到速记语法的附加值,倾向于在整个代码中使用var语句以保持一致性。

我只在必要时使用var,例如:

1全局变量

2如果陈述如下:

var err error
if x == nil {
    err = errors.New("x is nil")
} else if y == nil {
    err = errors.New("y is nil")
}
…我总是尝试使用:=语法。当您需要重构代码时,好处是巨大的


您没有将变量的名称绑定到任何特定类型,并且每当您更改右侧的类型时,该变量都会自动推断出新类型。

我更喜欢第一个类型:3只是个人观点,两者都做同样的工作。然而,gofmt或go团队定义您使用速记语法而不是推断语法。由于这是惯例,我建议这样做。在定义全局变量时,您将被迫使用var。