Go语言变量初始化方法

以下四种命名方法是等价的:

  1. s := “”
  2. var s string
  3. var s = “”
  4. var s string = “”

那么什么时候用哪种而不用哪种,为什么?

第一种形式最简洁,但只能用在函数内部,不能用在包变量。

第二种形式依赖于字符串的默认初始化值,被初始化为""。

第三种形式用得很少,除非同时声明多个变量。

第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。

实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。

package mainimport ("fmt""os"
)func main() {s, sep := "", ""for _, arg := range os.Args[1:] {s += sep + argsep = " "}fmt.Println(s)
}

这是一个简单的字符串拼接语句,可以看到每次循环迭代字符串s的内容都会更新。

+=连接原字符串、空格和下个参数,产生新字符串, 并把它赋值给s。s原来的内容已经不再使用,将在适当时机对它进行垃圾回收

但是,这种字符串拼接的方法在数据数据量很大时会产生高昂的空间代价。

重点

一种简单且高效的解决方案是使用strings包的Join函数:

func main() {fmt.Println(strings.Join(os.Args[1:], " "))
}