前言
本章旨在介绍变量的定义、初始化、使用方面的知识,在IDE里面跟着敲会获益匪浅,纸上得来终觉浅!
变量声明
var name type
var 是声明变量的关键字,name 是变量名,type 是变量的类型。
声明方式
1. 正常命名:var name string
2. 批量命名:var (
a string
b int
c bool
d float32
e func() bool
d struct {
x int
}
)
3. 简短格式:a,b := 1,"str"
变量初始化
1. 正常: var sex int = 1
2. 省略类型: var sex = 1
3. 简短:sex := 1 //注意不能重复赋值,相当于java中的final关键字
4. 多重赋值:var a int = 10
var b int = 20
a,b = b,a // 结果为 a=20,b=10
5. 匿名变量,使用下划线”_“标识
a, _ = 10, 20 // 注意匿名变量不能再次使用
作用域
1. 全局变量(函数外)
// 声明全局变量
var a int
func main(){
fmt.Println(a)
}
2. 局部变量(函数内)
func main() {
// 局部变量
var a int = 10
var b int = 20
c := a + b
fmt.Printf("a=%d, b=%d, c=%d", a, b, c)
}
3. 形式参数(函数中)
// a 和 b 即为形式参数
func add(a int, b int) int {
return a + b
}
变量类型
整形
有符号整数int | 无符号整数uint |
---|---|
int8 | uint8 |
int16 | uint16 |
int32 | uint32 |
int64 | uint64 |
byte和int8是等价的,强调其是一个原始数据,而不是做整数使用
int8 的取值范围 − 2 ( n − 1 ) -2^{(n-1)} −2(n−1) 到 2 ( n − 1 ) − 1 2^{(n-1)}-1 2(n−1)−1,n=8,以此类推
浮点型
float32 | float64 |
---|
复数
complex64 | complex128 |
---|
声明方法:
var name complex64 = complex(1, 2)
布尔
bool 默认false
常量
const a = 1
const b string = "1"
const (
a = "1"
b = true
)
无类型常量
// 圆周率π
const Pi64 float64 = math.Pi
var pi32 float32 = float32(Pi64)
类型转换
var a int = 1
b := float64(a) // 转换
fmt.Println(b)
类型别名和类型定义
1. 类型别名:
type 类型别名 = int\uint\byte
类型别名和“=”后面的类型是一致,起别名的目的是为了代码更好维护
2. 类型定义:
type NewInt int
NewInt是int的新类型,NewInt本身具备int类型的特性
3. 非本地类型不能定义方法
本地类型是指非外部引用,如果引用,不能用在方法的回调当中,例如下面这段代码
package main
import (
"time"
)
// 定义time.Duration的别名为MyDuration
type MyDuration = time.Duration
// 为MyDuration添加一个函数
func (m MyDuration) EasySet(a string) {
}
func main() {
}
报错内容:
**gotest/govartest.go:9:7: cannot define new methods on non-local type time.Duration**
4. 在结构体嵌入时使用别名
type Brand struct{
}
type NikeBrand = Brand
type Viehcle struct{
Brand
NikeBrand // 类型实际还是Brand,只是字段名为NikeBrand
}
关键字
go语言是25个
序号 | Name | 释义 |
---|---|---|
1. | var | 变量定义 |
2. | break | 循环中断 |
3. | return | 函数返回 |
4. | func | 方法定义 |
5. | continue | 跳过本次循环 |
6. | for | 开启循环 |
7. | package | 包声明 |
8. | if | 条件判断 |
9. | else | 分支判断 |
10. | const | 常量声明 |
11. | import | 引入包 |
12. | switch | 多条件判断 |
13. | case | 条件分支 |
14. | struct | 定义结构体 |
15. | interface | 接口:定义规范 |
16. | select | 用于通道操作 |
17. | go | 启动一个协程 |
18. | goto | 无条件转移到程序的任何其他位置 |
19. | defer | 相当于java的finally,与panic、recover一同使用 |
20. | map | 创建键值对的集合 |
21. | chan | 用于声明一个通道 |
22. | fallthrough | 用在Switch,case 条件中,在行尾有fallthrough不会判断case条件 |
23. | range | 用于遍历数组、slice、map、通道 |
24. | default | 在Switch case中匹配默认条件 |
25. | type | 定义新的类型,给类型起别名 |