第4节 Go中的变量

71 阅读3分钟

1. 什么是变量?

作为软件开发人员,不能使用何种开发语言,变量都是程序的基本组成单位之一,如何理解变量?

  • 从日常生活的角度理解,变量其实就和人的名字很类似,代表你这个人,别人通过名字就能找到你

  • 从计算机的角度理解,变量其实就是计算机内存空间的一个数据的表示

2. 变量入门案例

package main
import "fmt"

func main() {
	// 声明一个变量 a
	var a int
	// 给变量 a 赋值
	a = 10
	// 使用变量
	fmt.Println("a = ", a)
}

image.png

2.1 变量声明、初始化和赋值

2.2.1 声明变量语法

var 变量名 数据类型

2.2.2 初始化变量

变量声明的同时给变量一个初始值

var a int = 6
  • 如果声明变量时就赋值,可以省略数据类型
var a = 6

2.2.3 变量赋值

// 声明变量 i,默认值是 0 
var i int 
// 给变量 i 赋值
i = 12

3. Go 中变量使用的三种方式

  • 声明变量后若不赋值,则使用默认值
func main() {
    // int 类型的默认值是 0 
    var i int 
    fmt.Println("i = ", i) // i = 0
}
  • 类型推导,根据值自动判断变量类型
func main() {
    var f = 68.87
    fmt.Println("f = ", f) // f =  68.87,浮点类型变量
}
  • 省略 var 关键字
func main() {
    // : 不能省略,否则编译错误
    age := 32
    fmt.Println("age = ", age) // age =  32
    
    b := 0
    c := 0.0
    // b的类型:int, c的类型:float64 ;需要注意整数和浮点型变量类型推导时默认值的不同
    fmt.Printf("b的类型:%v,c的类型:%v\n",reflect.TypeOf(b),reflect.TypeOf(c))
}

4. 多变量声明

4.1 方式一


func main() {
     var n1, n2, n3 int
     n1 = 3
     n2 = 4
     n3 = 5
     // n1= 3 n2= 4 n3= 5
     fmt.Println("n1=",n1,"n2=",n2,"n3=",n3)
}

4.2 方式二

声明变量的同时进行赋值


func main() {
     var a1, name, a3 = 1, "Jack", 100
     // a1= 1 name= Jack a3= 100
     fmt.Println("a1=",a1,"name=",name,"a3=",a3)
}

4.3 方式三

类型推导,省略关键字 var


func main() {
     b1, name1, b3 := 1, "Tom", 100
     // b1= 1 name1= Tom b3= 100
     fmt.Println("b1=",b1,"name1=",name1,"b3=",b3)
}

5. 变量使用注意事项

  • 在同一作用域(函数或者代码块内),同类型变量可以被重复赋值

func main() {
     var f1 = 1
     f1 = 2
     f1 = 3
     fmt.Println("f1=",f1)
}
  • 在同一作用域(函数或者代码块内),变量名不能重复
  • 变量如果没有被赋值,编译器会使用默认值,比如 int 的默认值 0 ;string 的默认值空串;浮点数的默认值 0

6. Go中的变量命令规范

6.1 严格区分大小写

var a int
var A int
// 变量 a 和 变量 A 表示的是两个不同的变量

6.2 不可用使用Go语言内置的关键字、数据类型和内嵌函数作为变量名称

  • 关键字
breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughtifrangetype
continueforimportreturnvar
  • 内置标识符 | append | bool | byte | cap | close | complex | | --- | --- |---|---|---|---| | complex64 | complex128 | unit16 | copy | false | float32 | | float64 | imag | int | int8 | int16 | unit32 | | int32 | int64 | iota | len | make | new | | nil | panic | uint64 | print | println | real | | recover | string | true| unit | unit8 | uintprt |

6.3 变量名、函数名、常量名采用驼峰命名

6.4 慎重使用下划线_,在 Go 中它被称为空标识符

  • 标准使用方式是被用作占位符
// err 如果转换过程中有错误信息,将错误信息打印出来
b , err = strconv.ParseBool(str)
fmt.Printf("b=%v,err=%v\n",b,err)

// 忽略方法返回的错误信息
b , _ = strconv.ParseBool(str2)
fmt.Printf("b=%v,err=%v\n",b)

6.4 不能使用数字开头作为变量名称

var hello int    // 正确
var hello12 int  // 正确
var hello_12 int // 正确
var 12hello int  // 错误
var _hello int   // 正确
var _  int       // 错误
var Hello int    // 正确
var hello-world int  // 错误

6.5 package的命名和访问权限

  • 保持package 的名字和目录保持一致,不要和标准库冲突

image.png

  • 如果变量、函数名、常量名首字母大写,则可以被其它包使用;如果首字母小写,则只能在本包中使用(首字母大写是公开的,首字母小写是私有的