基本數據類型【數值型、字符型、布爾型、字符串】#
數值型【整數類型、浮點類型】#
整數類型【有符號整數類型、無符號整數類型、其他整數類型】#
== 存放整數值的類型,默認值為 0==
【1】有符號整數類型:
類型 | 有無符號 | 占用儲存空間 | 表數範圍 |
---|---|---|---|
int8 | 有 | 1 字節 | -27~27-1(-128~127) |
int16 | 有 | 2 字節 | -215~215-1(-32768~32767) |
int32 | 有 | 4 字節 | -231~231-1(-2147483648~2147483647) |
int64 | 有 | 8 字節 | -263~263-1 |
【2】無符號整數類型:
類型 | 有無符號 | 占用儲存空間 | 表數範圍 |
---|---|---|---|
uint8 | 無 | 1 字節 | 0~255 |
uint16 | 無 | 2 字節 | 0~216-1 |
uint32 | 無 | 4 字節 | 0~231-1 |
uint64 | 無 | 8 字節 | 0~263-1 |
【3】其他整數類型:
類型 | 有無符號 | 占用儲存空間 | 表數範圍 |
---|---|---|---|
int | 有 | 32 位系統占 4 字節 64 位系統占 8 字節 | -231~231-1 -263~263-1 |
uint | 無 | 32 位系統占 4 字節 64 位系統占 8 字節 | 0~232-1 0~264-1 |
rune | 有 | 等價 int32 | -231~231-1 |
byte | 無 | 等價 uint8 | 0~255 |
浮點類型#
== 存放小數值的類型,默認值為 0==
類型 | 占用儲存空間 | 表數範圍 |
---|---|---|
float32 | 4 字節 | -3.403E38~3.403E38 |
float64 | 8 字節 | -1.798E308~1.798E308 |
golang默認的浮點類型是float64
字符型#
Golang中沒有專門的字符類型,若要存儲單個字符,一般使用byte來保存
ASCII 表:
漢字字符底層對應的是Unicode碼值,byte類型會溢出,所以可以用int
UTF-8 編碼表 :
== 總結:Golang 的字符對應使用的是 UTF-8 編碼(Unicode 是對應的字符集,UTF-8 是其中的一種編碼方案)==
轉義字符:
布爾型
== 只允許取值 true 和 false 的類型,默認值為 false==
布爾類型又叫 bool 類型,占 1 個字節,適用於邏輯運算,一般用於程序流程控制
字符串#
== 一串固定長度的字符連接起來的字符序列,默認值為 ""==
1、如果字符串沒有特殊字符,用雙引號""表示;如果字符串沒有特殊字符,用反引號``表示
package main
import "fmt"
func main() {
var str1 string = "abc"
fmt.Println(str1)
var str2 string = `a\b\c`
fmt.Println(str2)
}
2、字符串的拼接以及注意事項:
package main
import "fmt"
func main() {
var str1 string = "abc" + "def"
str1 += "xyz"
fmt.Println(str1)
//字符串拼接過長想換行,每行一定要以加號結尾
var str2 string = "abc" + "abc" + "abc" +
"abc" + "abc" + "abc" +
"abc" + "abc" + "abc" +
"abc" + "abc" + "abc" +
"abc" + "abc" + "abc"
fmt.Println(str2)
}
基本數據類型之間的轉換#
Go語言不同類型的變量之間賦值需要顯式轉換,並且只有顯式轉換(強制轉換)
package main
import "fmt"
func main() {
var n1 int = 100
//var n2 float32 = n1 這樣無法轉換,必須顯式轉換
var n2 float32 = float32(n1)
fmt.Println(n1)
fmt.Println(n2)
//int64轉換成int8時,編譯不會出錯,但是數據會溢出,類似於把很大的物件往很小的容器裡裝
var n3 int64 = 888888
var n4 int8 = int8(n3)
fmt.Println(n4) //輸出56
}
基本數據類型與 string 的轉換#
== 開發過程中,我們經常需要將基本數據類型轉換為 string , 或者將 string 轉換為基本數據類型 ==
方式一#
fmt.Sprintf("%參數",表達式),需要參數和表達式的類型匹配
package main
import "fmt"
func main() {
var n1 int = 15
var n2 float32 = 5.5
var n3 bool = true
var n4 byte = 'A'
var m1 string = fmt.Sprintf("%d", n1)
fmt.Printf("m1的數據類型是:%T, %q", m1, m1)
fmt.Println()
var m2 string = fmt.Sprintf("%f", n2)
fmt.Printf("m2的數據類型是:%T,%q", m2, m2)
fmt.Println()
var m3 string = fmt.Sprintf("%t", n3)
fmt.Printf("m3的數據類型是:%T,%q", m3, m3)
fmt.Println()
var m4 string = fmt.Sprintf("%c", n4)
fmt.Printf("m4的數據類型是:%T,%q", m4, m4)
}
運行結果
m1的數據類型是:string, "15"
m2的數據類型是:string,"5.500000"
m3的數據類型是:string,"true"
m4的數據類型是:string,"A"
方式二#
使用strconv包的函數
package main
import (
"fmt"
"strconv"
)
func main() {
var n1 int = 15
//第一個參數必須轉int64,第二個參數指定是多少進制
var m1 string = strconv.FormatInt(int64(n1), 10)
fmt.Printf("m1的數據類型是:%T, %q", m1, m1)
fmt.Println()
var n2 float64 = 5.5
//第二個參數'f'(-ddd.dddd),第三個參數保留小數點後幾位,第四個參數指定浮點類型
var m2 string = strconv.FormatFloat(n2, 'f', 9, 64)
fmt.Printf("m2的數據類型是:%T,%q", m2, m2)
fmt.Println()
var n3 bool = true
var m3 string = strconv.FormatBool(n3)
fmt.Printf("m3的數據類型是:%T,%q", m3, m3)
fmt.Println()
}
運行結果
m1的數據類型是:string, "15"
m2的數據類型是:string,"5.500000000"
m3的數據類型是:string,"true"
== 總結:重點使用方式一 ==
string 類型轉換為基本類型#
使用 strconv 包的函數
package main
import (
"fmt"
"strconv"
)
func main() {
//string---->bool
var n1 string = "true"
var m1 bool
//ParseBool函數返回值有兩個(value bool, err error)
//value是得到的布爾類型的數據,err是出現的錯誤,err可以用_直接忽略
m1, _ = strconv.ParseBool(n1)
fmt.Printf("m1的數據類型是:%T, %v", m1, m1)
fmt.Println()
//string---->int64
var n2 string = "55"
var m2 int64
//第二個參數指定幾進制,第三個參數指定結果必須能無溢出賦值的整數類型,0、8、16、32、64 分別代表 int、int8、int16、int32、int64
m2, _ = strconv.ParseInt(n2, 10, 64)
fmt.Printf("m2的數據類型是:%T, %v", m2, m2)
fmt.Println()
//string---->float
var n3 string = "8.8"
var m3 float64
//第二個參數指定了期望的接收類型,32是float32(返回值可以不改變精確值的賦值給float32),64是float64
m3, _ = strconv.ParseFloat(n3, 64)
fmt.Printf("m3的數據類型是:%T, %v", m3, m3)
fmt.Println()
//注意:一定要確保 string 類型夠能夠轉換成有效的數據,比如我們可將 "123" 轉換成一個整數,但是不能將 一個 “Hello” 轉換為整數,否則會變成轉換後的類型的默認值
var n4 string = "golang"
var m4 bool
m4, _ = strconv.ParseBool(n4)
fmt.Printf("m4的數據類型是:%T, %v", m4, m4)
fmt.Println()
var n5 string = "golang"
var m5 int64
m5, _ = strconv.ParseInt(n5, 10, 64)
fmt.Printf("m5的數據類型是:%T, %v", m5, m5)
}
運行結果
m1的數據類型是:bool, true
m2的數據類型是:int64, 55
m3的數據類型是:float64, 8.8
m4的數據類型是:bool, false
m5的數據類型是:int64, 0