Golang中 :=的详细用法

在Go语言中:=运算符被用来声明变量以及给变量赋值,它可以自动推断变量类型;

就像这样:

mystr := "hello world"

它等同于:

	var mystr string
	mystr = "hello world"

但是,有些情况你需要知道;看下面这段代码:

package main

func main(){

	mystr := "hello world"
	
	println(mystr)

	mystr := "I was just here"
	
	println(mystr)
	
}

这段代码编译器会报错;因为:=已经声明变量,相同变量不能在相同的作用域下声明两次,编译器会有这种错误:

no new variables on left side of :=

它告诉你 := 左侧不是新的变量,在这种情况,你应该使用 =,因为在前面该变量已经被声明;

可是,在多变量同时赋值时,情况又变得不一样了,看下面这段代码:

package main

func main(){

	mystr := "what is your name?"
	
	println(mystr)

	mystr,name := "my name is","Robot 1"

	println(mystr,name)

}

这段代码能正确编译并运行;因为在多变量赋值时,:= 运算符左侧,只要其中有一个变量是新的,就可以使用 :=,这里 mystr 使用了两次 := ,因为第二次使用时是在多变量赋值的情况下,且其中包含一个新的变量;

但你不能改变 mystr 的类型,因为在第一次使用 := 时,它已经被声明为字符串类型。

你可以使用了 _ 来忽略其中一个值,但 _ 不属于新的变量;

还有一点,:= 不能被用在函数体外,也就是说,当你打算声明一个全局变量时,你只能使用var。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/golang-colon-equal-sign.html

分类: 计算机技术
推荐阅读:
Golang中结构体方法的定义和使用 本文将详细的描述在Go语言中如何定义方法,以及如何使用它;阅读本文可能需要一点Go语言基础以及结构体的知识;
MySQL ERROR 1062错误出现原因及解决方法 当一个字段被设置成了主键(Primary Key)或唯一索引(Unique Index)时,那么该字段的数据不能重复;如果尝试插入已有数据,将产生1062错误;
Python delattr()函数 在Python中,delattr()函数用于删除对象的属性。它接受两个参数:第一个参数是要删除属性的对象,第二个参数是要删除的属性的名称。如果对象中不存在指定的属性,将会抛出AttributeError异常。
python @staticmethod装饰器 @staticmethod 是一个装饰器,用于声明一个静态方法。静态方法是一个属于类而不是属于实例的方法,可以直接通过类名调用,而不需要创建实例。
Pythone内置函数 Python 内置函数是 Python 解释器提供的函数库,这些函数可以直接使用,无需导入任何模块。
C语言检查矩阵是否为稀疏矩阵 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;