Go 语言变量

1、变量的组成
  • Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
  • 声明变量的一般形式是使用 var 关键字

  • var identifier type // 单个变量
  • var identifier1, identifier2 type // 可以一次声明多个变量
	package main
	import "fmt"
	func main() {
	    var a string = "drifter"     // 声明 a 为字符串 drifter
	    fmt.Println(a)
	
	    var b, c int = 1, 2    // 声明 b、c 为整型 1 和 2
	    fmt.Println(b, c)
	}

以上程序输出结果为 :

drifter
1  2
2、变量声明
2.1 、指定变量类型,如果没有初始化,则变量默认为零值。
  • 零值就是变量没有做初始化时系统默认的值。
	package main
	import "fmt"
	func main() {
	
		var a = "drifter"    	// 声明一个变量并初始化
		fmt.Println(a)      // 打印变量 a  
	
		var b int     // 指定变量类型但是未初始化 
		fmt.Println(b)  
	
		var c bool    // bool 零值为 false 
		fmt.Println(c)
	}

结果为:
在这里插入图片描述

  • 数值类型(包括complex64/128)为 0
  • 布尔类型为 false
  • 字符串为 " " (空字符串)
package main

import "fmt"

func main() {
    var i int   // 数值默认为 0
    var f float64
    var b bool   //  false
    var s string  // 字符串 则变量默认为空字符串
    fmt.Printf("%v %v %v %q\n", i, f, b, s)
    // 1、%v  只输出所有的值、2、%+v 先输出字段名字,再输出该字段的值、3、 %#v 先输出结构体名字值,再输出结构体(字段名字+字段的值)
    // %q   单引号围绕的字符字面值
}

在这里插入图片描述

2.2、根据值自行判定变量类型
	package main
	
	import "fmt"
	
	func main()  {
	    var d = true   
	    var e = "drifter"
	    fmt.Println(d,e)
	}

在这里插入图片描述

2.3、如果变量已经使用var 声明过了,再使用 := 声明变量,那就产生了编译错误
var intVal int     // 第一次声明
intVal :=1        // 第二次声明   
-------------------------------------
intval :=1 相当于 

var intVal int 
intVal =1 

可以将 var a dtring = “drifter” 简写为 a := “drifter”

		package main
		import "fmt"
		func main() {
		    a := "drifter"    // var f string = "drifter"
		    fmt.Println(a)
		}
2.4、多变量声明
	package main
	var x, y int
	var (  // 这种因式分解关键字的写法一般用于声明全局变量
	   a int
	   b bool
	)
	
	var c, d int = 1, 2
	var e, f = 123, "hello world"
	
	
	//g, h := 123, "hello"  变量的首选形式,这种不带声明格式的只能在函数体中出现,而不可以用于全局变量的声明与赋值,称之为初始化声明。
	func main(){
	   g, h := 123, "hello world"
	   println(x, y, a, b, c, d, e, f, g, h)
	}
3、值类型和引用类型
  • 所有像 int、float、bool 和 string 这些基本是哪个都是属于值类型,使用这些类型的变量直接指向存在内存中值;
  • 当使用等号 = 将一个变量的值赋值给另一个变量时,如 ( a = b)实际是哪个就是在内存中将 b 的值进行了拷贝;
  • 可以通过 &b 来获取变量b 的内存地址,值类型的变量的值存储在栈中;
  • 内存地址会根据机器的不同有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址,因为每台机器可能有不同的存储布局,并且位置分配也不同。
  • 引用类型的变量 a1 存储的 a1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
  • 这个内存地址被称为指针,这个指针实际上也被存在另一个的值中。
  • 同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。
  • 当使用赋值语句 a2 = a1 时,只有引用(地址)被复制。
  • 如果 a1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,a2 也会受到影响。
4、简短形式,使用 := 赋值操作符
  • 我们知道可以在变量的初始化时省略变量的类型而由系统自动推断,声明语句写上 var 关键字其实是显得有些多余了,因此我们可以将它们简写为 a := 50 或 b := false。
  • a 和 b 的类型(int 和 bool)将由编译器自动推断。
  • 这是使用变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。
  • 你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误。
  • 但是全局变量是允许声明但不使用的。 同一类型的多个变量可以声明在同一行。
  • 如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。
  • 空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值