五、Go 语言变量 2022-05-19 22:13 42阅读 0赞 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 声明变量的一般形式是使用 var 关键字: var identifier type ### 变量声明 ### 第一种,指定变量类型,声明后若不赋值,使用默认值。 var v_name v_type v_name = value 第二种,根据值自行判定变量类型。 var v_name = value 第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。 v_name := value // 例如 var a int = 10 var b = 10 c := 10 实例如下: package main var a = "菜鸟教程" var b string = "runoob.com" var c bool func main(){ println(a, b, c) } 以上实例执行结果为: 菜鸟教程 runoob.com false ### 多变量声明 ### //类型相同多个变量, 非全局变量 var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要显示声明类型,自动推断 vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误 // 这种因式分解关键字的写法一般用于声明全局变量 var ( vname1 v_type1 vname2 v_type2 ) 实例如下: package main var x, y int var ( // 这种因式分解关键字的写法一般用于声明全局变量 a int b bool ) var c, d int = 1, 2 var e, f = 123, "hello" //这种不带声明格式的只能在函数体中出现 //g, h := 123, "hello" func main(){ g, h := 123, "hello" println(x, y, a, b, c, d, e, f, g, h) } 以上实例执行结果为: 0 0 0 false 1 2 123 hello 123 hello -------------------- ## 值类型和引用类型 ## 所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值: ![4.4.2\_fig4.1][4.4.2_fig4.1] 当使用等号 `=` 将一个变量的值赋值给另一个变量时,如:`j = i`,实际上是在内存中将 i 的值进行了拷贝: ![4.4.2\_fig4.2][4.4.2_fig4.2] 你可以通过 &i 来获取变量 i 的内存地址,例如:0xf840000040(每次的地址都可能不一样)。值类型的变量的值存储在栈中。 内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。 更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。 一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。 ![4.4.2\_fig4.3][4.4.2_fig4.3] 这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字中。 同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。 当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。 如果 r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响。 -------------------- ## 简短形式,使用 := 赋值操作符 ## 我们知道可以在变量的初始化时省略变量的类型而由系统自动推断,声明语句写上 var 关键字其实是显得有些多余了,因此我们可以将它们简写为 a := 50 或 b := false。 a 和 b 的类型(int 和 bool)将由编译器自动推断。 这是使用变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。 ### 注意事项 ### 如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明,例如:a := 20 就是不被允许的,编译器会提示错误 no new variables on left side of :=,但是 a = 20 是可以的,因为这是给相同的变量赋予一个新的值。 如果你在定义变量 a 之前使用它,则会得到编译错误 undefined: a。 如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误,例如下面这个例子当中的变量 a: package main import "fmt" func main() { var a string = "abc" fmt.Println("hello, world") } 尝试编译这段代码将得到错误 **a declared and not used**。 此外,单纯地给 a 赋值也是不够的,这个值必须被使用,所以使用 fmt.Println("hello, world", a) 会移除错误。 但是全局变量是允许声明但不使用。 同一类型的多个变量可以声明在同一行,如: var a, b, c int 多变量可以在同一行进行赋值,如: var a, b int var c string a, b, c = 5, 7, "abc" 上面这行假设了变量 a,b 和 c 都已经被声明,否则的话应该这样使用: a, b, c := 5, 7, "abc" 右边的这些值以相同的顺序赋值给左边的变量,所以 a 的值是 5, b 的值是 7,c 的值是 "abc"。 这被称为 并行 或 同时 赋值。 如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。 空白标识符 \_ 也被用于抛弃值,如值 5 在:\_, b = 5, 7 中被抛弃。 \_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。 并行赋值也被用于当一个函数返回多个返回值时,比如这里的 val 和错误 err 是通过调用 Func1 函数同时得到:val, err = Func1(var1)。 [4.4.2_fig4.1]: /images/20220519/4e180877d33446da8c72682f7a20d246.png [4.4.2_fig4.2]: /images/20220519/df80f04750f540e7ad312ba8af9802c2.png [4.4.2_fig4.3]: /images/20220519/0c7cf4a83e1b48149f35d326fd0a976b.png 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Go语言变量 Go语言变量的声明(使用var关键字) 标准格式 Go语言的变量声明的标准格式为: var name type 变量声明以关键字 var 开头,后置变量类型,行 深碍√TFBOYSˉ_/ 2021年09月21日 14:46/ 0 赞/ 222 阅读
相关 Go语言变量 Go语言变量 变量源于数学,是计算机语言中能存储计算结果或能表示值抽象概念。变量可以通过变量名方法问。 Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字 小鱼儿/ 2021年12月04日 01:09/ 0 赞/ 131 阅读
相关 go语言打印errors类型变量 测试代码如下: package main import ( "errors" "fmt" ) var 落日映苍穹つ/ 2022年01月14日 14:41/ 0 赞/ 133 阅读
相关 Go语言错误总结(五) 29、未导出的结构体不会被编码 以小写字母开头的结构体将不会被(json、xml、gob等)编码,因此当你编码这些未导出的结构体时,你将会得到零值。 package 旧城等待,/ 2022年01月27日 03:51/ 0 赞/ 68 阅读
相关 五、Go 语言变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 声明变量的一般 r囧r小猫/ 2022年05月19日 22:13/ 0 赞/ 43 阅读
相关 go语言 常量和变量 一.不同类型的变量声明(定义) 1.传统防水 var a int var b float64 2.可以自动推导类型 深藏阁楼爱情的钟/ 2022年05月21日 13:34/ 0 赞/ 68 阅读
相关 go语言变量 变量是所有语言中最基本的元素,程序可以通过定义一个变量来申请一块数据的内存空间。GO语言的变量使用方式和C语言接近,但更具备强大的灵活性。 1.变量声明 GO语言的 ╰半橙微兮°/ 2022年05月24日 18:50/ 0 赞/ 56 阅读
相关 03 - Go 语言变量的定义 > Go 语言变量的定义 //go语言变量的定义 package main import "fmt" func main( 绝地灬酷狼/ 2022年09月03日 21:15/ 0 赞/ 33 阅读
相关 2.2 Go语言从入门到精通:Go语言变量 文章目录 1、变量的声明 1.1 标准声明格式 1.2 根据值自行判定变量类型 1.3 短变量声明 1.4 批 清疚/ 2022年11月03日 22:29/ 0 赞/ 29 阅读
相关 283-Go语言的变量 标识符与关键字 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如 变量名、常量名、函数名等等。 Go 语言中标识符由字母数字和 \_ (下划线)组成,并且只能 痛定思痛。/ 2023年01月15日 10:17/ 0 赞/ 13 阅读
还没有评论,来说两句吧...