go lang学习笔记 7 - 变量声明

1060
|
2021-12-14 17:56:00

标识符

在编程语言中具有特殊特殊意义的词,比如变量名,常量名,函数名等等。Go 语言中标识符由 字母、数字和下划线组成,并且只能以字母和 _ 开头

关键字

在编程语言中预定义的具有特殊含义的标识符。关键字和保留字都不建议用作变量名

Go 语言中的 25 个关键字

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthrougtifrangetype
continueforimportreturnvar

37个保留字

Constants:	true	false	into	ail

Types:	int 	int8	int16	int64
		uint	uint8	uint32	uint64	uintptr
		float32	float64	complex128	coplex64
		bool	byte	rune	string	error
		
Functions:	make	len 	cap		new 	append 	copy	close	delete
			complex	real	imag
			panic	recover

 

变量

Go 推荐变量命名方式为 驼峰式命名 第一单词首字母小写

变量来历

程序在运行中的数据都是存储在内存中,为了方便在内存中操作变量,就有了变量

变量的声明

必须先声明再使用,且 非全局变量 声明之后必须使用

同一个作用域中不可重复声明同名变量

标准声明

var name type  关键字 var, 变量名 name, 变量类型 type

批量声明

var (
	a string
	b int
	c bool
)

变量的初始化

func func1() {
	a = "John"
	b = 18
	c = true
	//变量声明之后必须使用,否则无法通过编译
	fmt.Printf("name: %s, age: %d, is student: %t\n", a, b, c)
}

声明并赋值

var str string = "hello world"

类型推导

根据变量值识别类型

var str = "hello world"

简短变量声明

只能在函数中使用,不能指定变量类型,是类型推导的简写

str := "hello world"
//指定类型
i1 := int8(9)
str1 := string("hello world")

推荐: 全局变量使用批量声明,函数中使用简短申明

匿名变量

函数可以返回多个值,当不需要使用其中一个变量时可以使用匿名变量,多用于占位

匿名变量不占用命名空间,
不占用内存

func foo() (int, string) {
	return 10, "Mark"
}

func main() {
	x, _ = foo()
	_, y = foo()
	fmt.Println("x=", x)
	fmt.Println("y=", y)
}

 

常量

常量的值恒定不变,例如错误码,状态码,通常定义在全局

声明

使用关键字 const

类型可以省略

在声明时必须给值,且声明之后不能再更改值

const pi float32 = 3.1415926

const (
	httpOk int = 200
	httpMiss int = 404
)

在批量声明常量时,如果第二行开始某一行没有赋值,则默认等于上一行的值

此方式未赋值的常量不能指定类型

const (
	num1 = 100
	num2 //没有赋值,默认等于上一行
	num3 int // 错误,不可指定类型
)

iota

iota 是 go 语言的常量计数器,只能在常量的表达式中使用

iotaconst 关键词出现时被置为 0const每增加一行常量声明 使 iota 计数一次, 可以理解它为 const 语句块中的行索引。使用 iota 能简化定义,在定义枚举时很有用

const (
	n1 = iota //0
	n2 //1
	n3 //2
	n4 //3
)

常见的 iota 示例

const (
	a1 = iota //0
	a2 //1
	_
	a3 //3
)
const (
	b1 = iota //0
	b2 = 100 //100
	b3 //100
	b4 //100
)

const (
	c1 = 100 //100
	c2 = iota //1
	c3 //2
	c4 //3
)
const (
	d1, d2, d3 = iota + 1, iota + 2, iota + 1 //1, 2, 1 解析: 此时 iota = 0
											  // 空行不算
	d4, d5     = iota + 1, iota + 2           //2, 3 解析: iota = 1
	d6, d7                                    //3, 4 解析: iota = 2, d6 = iota + 1, d7 = iota + 2
	d8                                        //错误,个数要和上面一样
)

定义数量级

const (
	_  = iota
	KB = 1 << (10 * iota) //二进制数,1左移10位 即 10000000000 即 十进制数 1024
	MB //左移20位
	GB
	TB
	PB
)

左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。