GO语言学习入门笔记系列详解(二):Go的变量和常量定义
变量定义
- var关键字:说明是一个变量
- 变量名在前,变量类型在后
函数内定义变量
func variableZeroValue() {
//变量名在前,变量类型在后
var a int
var s string
//go语言的变量一定会有一个初始值
//int类型初值是0
//string类型的初值是"",使用%q可以将空字符串打出来
fmt.Printf("%d %q\n", a, s)
}
- go语言函数内的变量一旦定义,就必须使用
func variableValueInit() {
//自定义赋初值
var a, b int = 3, 4
var s string = "abc"
//go语言的变量一旦定义就必须使用
fmt.Println(a, b, s)
}
- 可以不规定变量类型,可以写在一行,会自动识别
func variableTypeDeduction() {
var a, b, c, s = 3, 4, true, "def"
fmt.Println(a, b, c, s)
}
- 函数内定义变量简略写法,用
:=
表示定义一个变量
func variableShorter() {
//第一次变量定义可以使用:=
a, b, c, s := 3, 4, true, "def"
//之后重新复制不可以
a = 5
fmt.Println(a, b, c, s)
}
函数外定义变量
- 可以省略类型,但是不能用
:=
来赋初值
//叫做包内变量
var aa = 3
var ss = "hello you"
var bb = true
- 简单写法
//变量定义
var (
aa = 3
ss = "hello you"
bb = true
)
内建变量类型
变量的类型
-
bool和string
-
整型int,前面加u表示无符号,后面的数字表示规定的长度
uintptr表示指针,这个指针的长度跟随系统
(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr
- byte和rune(长度是32位,相当于char类型)
- float32,float64,complex64,complex128(complex表示复数)
复数回顾
e i φ = cos φ + i sin φ ∣ e i φ ∣ = cos 2 φ + sin 2 φ = 1 e 0 = 1 , e i π 2 = i e i π = − 1 , e i i 2 π = − i , e i 2 π = 1 \begin{aligned} &e^{i \varphi}=\cos \varphi+i \sin \varphi \\ &\left|e^{i \varphi}\right|=\sqrt{\cos ^{2} \varphi+\sin ^{2} \varphi}=1 \\ &e^{0}=1, e^{i \frac{\pi}{2}}=i \\ &e^{i \pi}=-1, e^{i \frac{i}{2} \pi}=-i, e^{i 2 \pi}=1 \end{aligned} eiφ=cosφ+isinφ∣∣eiφ∣∣=cos2φ+sin2φ=1e0=1,ei2π=ieiπ=−1,ei2iπ=−i,ei2π=1
Go语言如何表示复数
func euler() {
//不能写成4*i,会认为i是一个没有定义的变量
c := 3 + 4i
fmt.Println(cmplx.Abs(c))
}
强制类型转换
-
类型转换是强制的
-
举例子:验证勾股定理
var a,b int = 3,4
var c int = math.Sqrt(a*a + b*b)
func triangle() {
var a , b int = 3,4
var c int
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}
常量与枚举
常量定义
常量相当于一个文本替换的动作。
func constants() {
const fliename = "abc.txt"
const a , b = 3,4
var c int
c = int(math.Sqrt(a*a + b*b))
fmt.Println(filename,c)
}
常量的定义也可以使用括号
func constants() {
const (
fliename = "abc.txt"
a, b = 3, 4
)
var c int
c = int(math.Sqrt(a*a + b*b))
fmt.Println(c)
}
枚举定义
- 没有自增
func enums() {
const (
cpp = 0
java = 1
python = 2
golang = 3
)
fmt.Println(cpp, java, python, golang)
}
- 带有自增
const (
cpp = iota
java
python
golang
)
- iota可以作为自增量
//iota可以作为自增值
const (
b = 1 << (10 * iota)
kb
mb
gb
db
)