Go: 分布式学习利器(3) -- Go的数据类型和运算符
生活随笔
收集整理的這篇文章主要介紹了
Go: 分布式学习利器(3) -- Go的数据类型和运算符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. Go的數據類型
- 1.1 類型轉化
- 1.2 類型的預定義
- 1.3 指針類型
- 2. Go 的運算符
1. Go的數據類型
GO的基本數據類型如下:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // 基本和uint8 類型一樣
rune // 代表unicode 的字符編碼,和 uint32類似
float32 float64 // 浮點類型
complex64 complex128 // 復數類型
1.1 類型轉化
Go的類型轉化和其他語言的主要差異:
- Go語言不允許隱式類型轉化
- 別名和原有類型也不能進行隱式類型轉化
比如如下代碼,測試隱式類型轉化,go的規則并不允許
package _typeimport "testing"func TestImplicit(t *testing.T) {var a int = 1var b int64 b = a // 報錯,cannot use a (type int) as type int64 in assignmentb = int64(a) // 顯示類型轉化即可t.Log(a, b)
}
再比如如下測試代碼, 測試別名和原有類型也不能進行隱式類型轉化
type MyInt int;
func TestOthername(t *testing.T) {var a int = 1var c MyInt c = a // 使用原有類型,不過是別名,也無法進行隱式類型轉化c = MyInt(a) // 只有顯式類型轉換才可以t.Log(a,c)
}
1.2 類型的預定義
Go 支持類型的預定義,比如想要獲取某一種類型的最大最小值,可以直接通過內置的預定義類型獲取
比如:
math.MaxFloat64 //最大浮點類型
math.MaxUint64 // 最大無符號整型
math.MaxInt64 // 最大的整型
...
1.3 指針類型
Go的指針類型和其他語言的主要差異是:
- 不支持指針的運算(其他語言可以支持指針地址的自加)
- string 是值類型,其默認的初始化值為空字符串,而不是nil
如下代碼,測試指針類型的運算:
func TestPointer(t *testing.T) {a := 1aPtr := &a // 正常輸出 變量a的地址0xc00001c190aPtr = aPtr + 1 // 指針運算會報錯,Fail: aPtr + 1 (mismatched types *int and int)t.Log(a,aPtr)t.Logf("%T %T", a, aPtr)
}
如下代碼,測試string類型:
func TestString(t *testing.T) {var s stringt.Log("*"+s+"*", len(s)) // 字符串是空的,且字符串的長度為0
}
所以在Go語言中判斷一個字符串是否為空,不像C語言中if (s == NULL) {} ,而是if s=="" {}
2. Go 的運算符
基本的運算符和其他語言一樣:算術運算符(+,-,*,/,%,++,–),比較運算符(==,!=,>,<,>=,<=),邏輯運算符(&&,||,!),位運算符(&,|,^,<<,>>)
需要注意的是和其他語言的差異 如下幾點:
- Go語言沒有前置的 ++ 和 –
- 支持 == 比較數組
要求是:
相同維數且含有相同個數元素的數組才可以比較
每個元素都相同的才相等 - Go語言支持按位置零
&^,將右側值為1 的所有位都置01 &^ 0 = 1 1 &^ 1 = 0 0 &^ 1 = 0 0 &^ 0 = 0
關于數組的比較測試如下代碼如下:
func TestArray(t *testing.T) {a := [...]int{1,2,3,4}b := [...]int{1,2,4,3}c := [...]int{1,2,3,4,5}d := [...]int{1,2,3,4}// t.Log(a==b,a==c,a==d) // a==c fail, 不支持不同元素個數的數組比較t.Log(a==b,a==d) // success
}
輸出如下:
=== RUN TestArraytype_test.go:43: false true
--- PASS: TestArray (0.00s)
總結
以上是生活随笔為你收集整理的Go: 分布式学习利器(3) -- Go的数据类型和运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果修主板多少钱啊?
- 下一篇: Go 分布式学习利器(4)-- 条件和循