banner
音小董

哩哔哩哔

这世上的热闹出自孤单

第2章:基本數據類型

基本數據類型【數值型、字符型、布爾型、字符串】#

數值型【整數類型、浮點類型】#

整數類型【有符號整數類型、無符號整數類型、其他整數類型】#

== 存放整數值的類型,默認值為 0==

【1】有符號整數類型:

類型有無符號占用儲存空間表數範圍
int81 字節-27~27-1(-128~127)
int162 字節-215~215-1(-32768~32767)
int324 字節-231~231-1(-2147483648~2147483647)
int648 字節-263~263-1

【2】無符號整數類型:

類型有無符號占用儲存空間表數範圍
uint81 字節0~255
uint162 字節0~216-1
uint324 字節0~231-1
uint648 字節0~263-1

【3】其他整數類型:

類型有無符號占用儲存空間表數範圍
int32 位系統占 4 字節

64 位系統占 8 字節
-231~231-1

-263~263-1
uint32 位系統占 4 字節

64 位系統占 8 字節
0~232-1

0~264-1
rune等價 int32-231~231-1
byte等價 uint80~255

浮點類型#

== 存放小數值的類型,默認值為 0==

類型占用儲存空間表數範圍
float324 字節-3.403E38~3.403E38
float648 字節-1.798E308~1.798E308

golang默認的浮點類型是float64

字符型#

Golang中沒有專門的字符類型,若要存儲單個字符,一般使用byte來保存

ASCII 表:

ASCII 表.png

漢字字符底層對應的是Unicode碼值,byte類型會溢出,所以可以用int

UTF-8 編碼表 :

點擊此處查表

== 總結:Golang 的字符對應使用的是 UTF-8 編碼(Unicode 是對應的字符集,UTF-8 是其中的一種編碼方案)==

轉義字符:

轉義字符表.png

布爾型

== 只允許取值 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 
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。