1. 定义变量
1.2 使用var关键字
- var a, b, c bool
- var s1, s2 string = “hello”,“world”
- 可以直接放在函数内或者直接放在包内
- 可以使用var()集中定义变量
1.3 让编译器自动决定类型
- var a, b, i, s1, s2 =true, false, 3, “hello”, “world”
1.4 使用:=定义变量
- a, b, i, s1, s2 :=true, false, 3, “hello”, “world”
- 只能在函数内使用
1.5 Demo
var (
aa = 3
ss = "kkk"
bb = true
)
func variableZeroValue() {
var a int
var s string
fmt.Printf("%d %q\n", a, s)
}
func variableInitialValue() {
var a, b int = 3, 4
var s string = "abc"
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"
b = 5
fmt.Println(a, b, c, s)
}
2. 内建变量类型
- bool, string
- (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
- byte, rune
- float32, float64, complex64, complex128
Go语言与其它语言重复的内建变量不做赘述。需要注意的是(u)就是unsigned代编有符合或无符号,go语言中让人陌生的主要是
- uintptr,Go语言的指针类型
- rune,Go语言没有char类型,其实 rune就是Go语言的char类型,而且是char32位
- complex 复数类型
复数,最美欧拉公式demo
func euler() {
c := 3 + 4i
fmt.Println(cmplx.Abs(c))
//验证欧拉公式
fmt.Printf("%.3f\n",
cmplx.Exp(1i*math.Pi)+1)
}
3. Go语言的类型转换
很多语言都可以隐式的进行类型转换,比如C语言,可以默认的从低精度到高精度转,浮点数除整数后,结果默认为浮点数,但是Go语言没有隐式强制类型转换,必须显示转换。
func triangle() {
var a, b int = 3, 4
fmt.Println(calcTriangle(a, b))
}
func calcTriangle(a, b int) int {
var c int
c = int(math.Sqrt(float64(a*a + b*b)))
return c
}
4. 常量与枚举
与其它语言类似,Go语言的常量也是使用const关键字。
func consts() {
const (
filename = "abc.txt"
a, b = 3, 4
)
var c int
c = int(math.Sqrt(a*a + b*b))
fmt.Println(filename, c)
}
利用常量类型可以定义枚举类型
func enums() {
const (
cpp = iota
_
python
golang
javascript
)
const (
b = 1 << (10 * iota)
kb
mb
gb
tb
pb
)
fmt.Println(cpp, javascript, python, golang)
fmt.Println(b, kb, mb, gb, tb, pb)
}
其中:
- iota是go语言的常量计数器,只能在常量的表达式中使用。
- iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。
- 使用iota能简化定义,在定义枚举时很有用。