Go語言的基本類型有:
bool
string
int、int8、int16、int32、int64
uint、uint8、uint16、uint32、uint64、uintptr
byte // uint8 的別名
rune // int32 的別名
float32、float64
complex64、complex128
當一個變量被聲明之后,系統自動賦予它該類型的零值:
int 為 0,float 為 0.0,bool 為 false,string 為空字符串,指針為 nil 等
一、基本類型存儲大小
位(bit):是計算機中最小的數據單位,每一位的狀態只能是0或1;
字節(byte):8個位構成一個字節,是存儲的基本計量單位;
字符:字符是由一個或多個字節組成。
ASCII碼:用於將字母轉為數字來存儲
1.1 bool和string
bool占 1 byte
字母和特殊符號轉換數字后存儲 占1字節
中文(utf-8) 占3字節
1.2 int/int8/int16/int32/int64 和 uint/uint8/uint16/uint32/uint64/uintptr
數字由十進制轉為二進制來存儲,負數以補碼的形式存儲,小數以浮點數形式存儲
最高 bit 位用來表示符號位,一個 n-bit 的有符號數的取值范圍是從 -2(n-1) 到 2(n-1)-1。無符號整數的所有 bit 位都用於表示非負數,取值范圍是 0 到 2n-1。
int8 ---->(-128 到 127)
int16 --->(-32768 到 32767)
int32 --->(-2147483648 到 2147483647)
int64 --->(-9223372036854775808 到 9223372036854775807)
uint8 --->(0 到 255)
uint16 -->(0 到 65535)
uint32 -->(0 到 4294967295)
uint64 -->(0 到 18446744073709551615)
實際開發中由於編譯器和計算機硬件的不同,int 所能表示的整數大小會在 32bit 或 64bit 之間變化
64位操作系統, int默認是int64
32位操作系統, int默認是int32
無符號的整數類型 uintptr,它沒有指定具體的 bit 大小但是足以容納指針。
1.3 byte和rune
byte uint8 的別名
rune int32 的別名 代表一個 Unicode 碼
1.4 float32、float64
float32 占用4個字節
float64 占用8個字節
浮點數取值范圍的極限值可以在 math 包中找到:
常量 math.MaxFloat32 表示 float32 能取到的最大數值,大約是 3.4e38;
常量 math.MaxFloat64 表示 float64 能取到的最大數值,大約是 1.8e308;
float32 和 float64 能表示的最小值分別為 1.4e-45 和 4.9e-324。
二、轉換
只有相同底層類型的變量之間可以進行相互轉換(如將 int16 類型轉換成 int32 類型),不同底層類型的變量相互轉換時會引發編譯錯誤
打印 類型和值
fmt.Printf("%T %v\n",str,str)
strconv庫
2.1 string 與 int 類型之間的轉換
func Itoa(i int) string
func Atoi(s string) (i int, err error)
2.2 Parse 系列函數
Parse 系列函數用於將字符串轉換為指定類型的值,其中包括 ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
func ParseBool(str string) (value bool, err error)
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func ParseFloat(s string, bitSize int) (f float64, err error)
2.3 Format 系列函數
Format 系列函數實現了將給定類型數據格式化為字符串類型的功能,其中包括 FormatBool()、FormatInt()、FormatUint()、FormatFloat()。
func FormatBool(b bool) string
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
2.4 Append 系列函數
Append 系列函數用於將指定類型轉換成字符串后追加到一個切片中,其中包含 AppendBool()、AppendFloat()、AppendInt()、AppendUint()。
Append 系列函數和 Format 系列函數的使用方法類似,只不過是將轉換后的結果追加到一個切片中。
示例代碼如下:
package main
import (
"fmt"
"strconv"
)
func main() {
// 聲明一個slice
b10 := []byte("int (base 10):")
// 將轉換為10進制的string,追加到slice中
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
}