2.变量

变量

Golang 有四种声明

1
2
3
4
var			// 声明变量 
const		// 声明常量
type		// 声明类型
func		// 声明函数

1. 基础内容

1.1. 变量的基本用法

1
2
3
var {variable} {type} = {表达式} // 其中类型 或表达式可以省略一个
var {variable} = {表达式}
var {variable} {type}

表达式省略时,将初始化零值

1
2
3
4
5
6
// 各个类型的零值
var INT int = 0
var STRING string = ""
var BOOL bool = false
var INTERFACE interface{} = nil
// 引用类型(slice,map,chan,func,point,interface{}) 零值都是 nil

Go开发者应该让聚合类型的零值也具有意义,可以保证任何类型变量总有合理有效的零值状态。

1.2. 多参数声明

1
2
var i,j,k int    						 // int,int,int
var b,f,s = true,2.3,"four"  // bool,float64,string
  • 在包级别声明的变量会在 main 入口函数之前完成初始化
  • 局部变量将在声明语句被执行到的时候完成初始化

1.3. 简短声明变量

此方式广泛用于局部变量声明和初始化。

那么什么时候用 var ,什么时候使用简短声明? 建议

  • 初始化零值时,用 var。因为通常 var:= 更醒目,更易辨认声明变量。
  • 非零值,使用 :=
1
2
3
4
5
6
7
8
t := 0.0
str := "hello"
freq := rand.Float64() * 3.0
i,j := 0,1		
// 交互 a,b 的值
a := 10
b := 20
a,b = b,a  // a=20, b=10

注意

  • 包级别变量 与 局域变量的区分,包级别定义的变量,在函数内使用 := 时,会在函数内声明新变量

  • 区分 := 「声明语句」 与 = 「赋值语句」

    • := 左侧的变量已经存在时 , 编译报错 , 有多个返回值且某一个变量存在 , 则赋值存在变量,创建新变量

      1
      2
      3
      
      var k int
      k,err := function()   // k 已经存在, 此处赋值给 k 并创建 err 变量
      k := 10               // 编译器报错,至少需要一个声明的新变量才能使用 :=
      

1.4. 强制类型转换

类型转换会产生一个新的内存成本,但是我们宁可安全也不后悔。

可以使用 unsafe 包来做一些转换,但是如果有一个字节的偏差就会遇到真正的问题。

1
2
3
var a,b int = 3,5
var c float64 = a    // ❌ 错误示范 
var d float64 = float64(a)

1.5. int 类型在不同架构下

在 amd64 架构下,表示 64 位,8 字节(byte)

在 amd32 架构下,表示 32 位,4 字节(byte)

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy