一、注释
- 单行注释
// 我是单行注释
- 多行注释
/*
我是多行注释
我是多行注释
我是多行注释
*/
二、变量
1. var name type
(声明变量时将变量的类型放在变量的名称之后)
- var,声明变量的关键字
- name,变量的名字
- type,变量的类型
eg:
单个定义变量
var name String = "WoO"
var age int = 18
批量定义变量
var (
addr string
phone string
)
var a,b,c int
2. 变量的命名规则:驼峰命名法
首个单词小写 后面每个新单词首字母大写
eg:userFiles 、systemInfo 等
3. 如果声明变量后 没有显式的给变量赋值 系统自动赋予它该类型的默认值:
- 整形和浮点型变量的默认值为0和0.0
- 字符串变量的默认值为空字符串
- 布尔型变量默认为false
- 切片、函数、指针变量的默认为nil
4. var形式的声明语句往往是用于需要显式指定变量类型的地方
5. 上面1.中我们使用=赋值 为变量初始化的标准格式 除此之外 我们还可以用短变量声明与初始化(只能用在函数内部):
name := "WoO"
age := 18
这是Go语言推导声名写法 编译器会根据右边值的类型自动推断出左边值对应的类型
因为不能提供数据类型 所以用Printf
查看变量类型
- 注:推导声明写法的左值变量必须没有定义过(即在声明变量时就初始化变量)
若被定义过则编译错误 只能使用等号进行赋值
6. 交换变量的值
Go
var a int = 100
var b int = 200
b,a = a,b
其他语言 则需要借助临时变量temp
a = 100
b = 200
temp = 0
temp = a
a = b
b = temp
7. 打印内存地址
取地址符&
+变量名
var age int
age = 18
fmt.Printf("age:%d,内存地址:%p", age, &age)
age = 23
fmt.Printf("age:%d,内存地址:%p", age, &age) //值发生变化 但内存地址不变
8. 匿名变量 _
_
是空白标识符 可以用于变量的声明或赋值(任何类型都可以赋值给它)
但任何赋给_
的值都会被抛弃
即这些值不能在后续的代码中使用 而且也不能用_
对其他变量赋值或运算
匿名变量不占用内存空间、不分配内存(直接被丢掉了)
匿名变量与匿名变量之间不会因为多次声明而无法使用
/*
定义一个test函数
返回两个int类型的值
每次调用都会返回100和200两个数值
*/
func test() (int, int) {
return 100, 200
}
func main() {
a, _ := test() //这里假设只需获取第一个返回值 则第二个返回值定义为匿名变量_
_, b := test() //这里假设只需获取第二个返回值 则第一个返回值定义为匿名变量_
fmt.Println(a, b) //输出结果为100 200 可以发现结果中少了200和100 是匿名变量发挥了作用
}
9. 作用域
- 局部变量——在函数体内声明 且作用域只在函数体内
eg:函数的参数和返回值变量都属于局部变量 - 全局变量——在函数体外声明 只需要在一个源文件中定义 就可以在所有源文件中使用
全局变量必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写
Go语言程序中全局变量与局部变量名称可以相同 函数体内的局部变量会被优先考虑(就近原则)
三、常量
常量中的数据类型只能是 布尔型、数字类型(整数,浮点,复数)、字符串型
1. const name type
- const,声明常量的关键字
- name,常量的名字
- type,常量的类型
func main() {
//显式定义
const a int = 1
//隐式定义 与声明变量相同 类型说明符可以省略
const b = "www.baidu.com"
const c, d, e = "WoO", "520", true //同时定义多个
fmt.Println(a, b) //输出结果为1 www.baidu.com
fmt.Println(c, d, e) //输出结果为WoO 520 true
}
2. 特殊常量iota(常量计数器)
func main() {
const (
a = iota
b //一组常量中 如果某个常量没有初始值 则默认和上一行一致 所以此处b也是iota
c //一组常量中 如果某个常量没有初始值 则默认和上一行一致 所以此处c也是iota
e = "依托"
d
f = "答辩"
g
h = iota //const中每新增一行常量声明时 iota的值都会加1(即iota为const语句块的行索引)
)
const (
i = iota //iota在const关键字出现时被重置为0
j
)
fmt.Println(a, b, c, d, e, f, g, h, i, j) //输出结果为0 1 2 依托 依托 答辩 答辩 7 0 1
}
四、数据类型
1. 布尔型
布尔型变量默认为false
应用场景:流程控制(if判断 、 for循环)
2. 数字类型
func main() {
//定义一个整型
var age int = 18
//浮点型在机器中存放形式:符号位+指数位+尾数位
//定义一个浮点型 默认打印六位小数
var money float64 = 3.14 //GoLang的浮点型默认为float64
fmt.Printf("%T,%d\n", age, age) //输出结果为int,18
fmt.Printf("%T,%f\n", money, money) //输出结果为float64,3.140000
fmt.Printf("%T,%.2f\n", money, money) //输出结果为float64,3.14 %.nf用来指定保留n位小数
}
类型 | 描述 |
---|---|
unit8 | 无符号8位整型(0到255) |
unit16 | 无符号16位整型(0到65535) |
unit32 | 无符号32位整型(0到4294967295) |
unit64 | 无符号64位整型(0到18446744073709551615) |
int8 | 有符号8位整型(-128到127) |
int16 | 有符号8位整型(-32768到32767) |
int32 | 有符号8位整型(-2147483648到2147483647) |
int64(默认) | 有符号8位整型(-9223372036854775808到9223372036854775807) |
float32 | IEEE-754 32位浮点型数 |
float64(默认) | IEEE-754 64位浮点型数 |
complex64 | 32位实数和虚数 |
complex128 | 64位实数和虚数 |
别名 | 对应 |
---|---|
byte | 类似unit8(0到255) |
rune | 类似int32 |
unit | 32或者64位 |
int | int64 |
uintptr | 无符号整型 用于存放一个指针 |
3.字符串型
var str string = "WoO"
fmt.Printf("%T,%s\n", str, str) //string,WoO
//单引号 字符,整型——ASCII字符码
v1 := '中'
v2 := 'A'
//编码表 ASCII字符码
//扩展:
//所有的中国字的编码表:GBK
//全世界的编码表:Unicode编码表
fmt.Printf("%T,%d\n", v1, v1) //int32,20013
fmt.Printf("%T,%d\n", v2, v2) //int32,65
参考资料:遇见狂神说