Golang 学习入坑(三)Go语言变量及常量

2021-04-19 15:26

阅读:321

//var identifier type
//其中 identifier  是变量,type是类型
例如:
var tongtong string = "zhang"
fmt.Println(tongtong)

//可以一起声明多个变量
var b, c int = 1, 2
fmt.Println(b,c)
(1、)数值类型变量声明如果无初始化,默认是0数值类型
(complex64/128)为 0

布尔类型为 false

字符串为 ""(空字符串)

以下几种类型为 nil

var a *

int
var a []int

var a map[string] int

var a chan int

var a func(string) int

var a error // error 是接口

(2、)根据值自行判定变量类型。

   var d = true
      fmt.Println(d)

   未声明类型,根据值判断输出true

(3、)第三种,省略 var, 注意 := 左侧如果没有声明新的变量,就产生编译错误,格式:

  

var intVal int 

intVal :=1 // 这时候会产生编译错误   因为intVal已经存在,不是新的变量

intVal,intVal1 := 1,2 // 此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句

  我们常用的是:

     haha :=  ‘我在笑‘

  fmt.PrintLn(haha)

(4、)多变量声明:

 //类型相同多个变量, 非全局变量

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
)

(5、)
值类型和引用类型 (重要)
所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值:
当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝:
你可以通过 &i 来获取变量 i 的内存地址
f := true
fmt.PrintLn(&f)
内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同.

 一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。

 这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字中。

 

  同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。

 

  当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。

 

  如果 r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响。

 

技术图片

 (6、)简短形式,使用 := 赋值操作符    这个就不解释了

  不过要注意一点的是:如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误 a declared and not used


评论


亲,登录后才可以留言!