golang數據類型
- 基本類型:boolean,numeric,string類型的命名實例是預先聲明的。
- 復合類型:array,struct,指針,function,interface,slice,map,channel類型(可以使用type構造)。
數據類型轉換表
// []byte -> other type []byte => string : string([]byte) []byte => int : binary包處理, 查看下面 // int -> other type int => string : s = strconv.Itoa(i) int => int32 : i32 = int32(num) int => int64 : i64 = int64(num) int64/int32 => int : i = int(num) int64 => string : strconv.FormatInt(int64, 10) int64 => time.Duration : time.Duration(int64) int32 => byte : bytes.NewBuffer() 看上面 int 和 byte 互轉 int => float64 : float64(num) // other type -> int i = int(int32/int64) float64/float32 => int(int64/int32) // string -> other type string => int : i, err = strconv.Atoi(s) string => bool : strconv.ParseBool("true") string => float32 : strconv.ParseFloat(s, 32) string => float64 : strconv.ParseFloat(s, 64) string => uint : strconv.ParseUint() string => int32/int64 : strconv.ParseInt(s, 10, 32/64) string => []byte : []byte(string) string(16進制) => int32/int64 : strconv.ParseInt(s, 0, 32/64) // other type -> string int,int32,int64 => string : str1 := fmt.Sprintf("%d", i) // i可以是int/int32/int64 或 str2 := strconv.Itoa(i) // i為int 或 str3 := strconv.FormatInt(int64(i), 10) // i可以是int/int32/int64 uint64 => string : strconv.FormatUint(unit64, 10) bool => string : strconv.FormatBool(true) float64 => string : strconv.FormatFloat(float64(12), 'f', -1, 64) 或 fmt.Sprintf("%.2f", float64) // array -> slice : 1) copy(array[:], slice[0:4]) | 全部 copy(array[:], slice) 2) for for index, b := range someSlice { array[index] = b } // slice -> array slice=>array : array[:]
數據類型說明
1. int類型中哪些支持負數
- 有符號(負號):int8 int16 int32 int64
- 無符號(負號):uint8 uint16 uint32 uint64
2. 浮點類型的值有float32和float64(沒有 float 類型)
3. byte和rune特殊類型是別名
- byte就是unit8的別名
- rune就是int32的別名
4. int和uint取決於操作系統(32位機器上就是32字節,64位機器上就是64字節)
- uint是32字節或者64字節
- int和uint是一樣的大小
5. 為了避免可移植性問題,除了byte(它是uint8的別名)和rune(它是int32的別名)之外,所有數字類型都是不同的。 在表達式或賦值中混合使用不同的數字類型時,需要轉換。例如,int32和int不是相同的類型,即使它們可能在特定架構上具有相同的大小。
筆記參考:GO基本數據類型總結