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能簡化定義,在定義枚舉時很有用。