Go語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類型使用實(shí)例
前言
任何語(yǔ)言都有數(shù)據(jù)類型,Go也不例外。有基礎(chǔ)的整型、浮點(diǎn)型、布爾型、字符串。還有數(shù)組、切片、結(jié)構(gòu)體、函數(shù)、map、通道等,這里主要鞏固下Go語(yǔ)言數(shù)據(jù)類型。
基礎(chǔ)數(shù)據(jù)類型
整型
在Go中整型數(shù)據(jù)類型主要分為
- 有符號(hào)整型
- 無(wú)符號(hào)整型
- 特殊整型
有符號(hào)整型
int8: 8位(-128 ~ 127)int16: 16位(-32768 ~ 32767)int32: 32位(-2147483648 ~ 214748347)int64: 64位(-9223372036854775808 ~ 9223372036854775807)
var a int8 var b int16 var c int32 var d int64
無(wú)符號(hào)整型
uint8: 8位(0 ~ 255)uint16: 16位(0 ~ 65535)uint32: 32位(0 ~ 4294967295)uint64: 64位(0 ~ 18446744073709551615)
var a uint8 var b uint16 var c uint32 var d uint64
特殊整型
uint: 在32位操作系統(tǒng)上就是unit32,64位操作系統(tǒng)上就是uint64int: 在32位操作系統(tǒng)上就是int32,64位操作系統(tǒng)上就是int64unitptr: 無(wú)符號(hào)整型,用于存放一個(gè)指針
var a unit var b int var c unitptr
在Go中也可以使用數(shù)字字面量語(yǔ)法
0b開(kāi)頭的代表二進(jìn)制0o開(kāi)頭的代表八進(jìn)制0x開(kāi)頭的代表十六進(jìn)制
浮點(diǎn)型
在Go中支持的浮點(diǎn)型有兩種
float32float64
var a float32 = 3.14 var b float64 = 3.1415
復(fù)數(shù)
在Go中支持的復(fù)數(shù)有兩種
complex64complex128
var a complex64 a = 1 + 2i var b complex128 b = 2 + 3i
復(fù)數(shù)擁有實(shí)部和虛部,complex64的實(shí)部和虛部為32位,而complex128的實(shí)部和虛部為64位
布爾值
在Go中布爾值通過(guò)bool進(jìn)行類型聲明,布爾值的數(shù)據(jù)只能時(shí)true和false,并且布爾類型變量的默認(rèn)值為false,Go中不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型,而且布爾型無(wú)法參加數(shù)值運(yùn)算,也無(wú)法與其他類型進(jìn)行轉(zhuǎn)換
var a bool = true var b bool = false
字符串
在Go中字符串是以雙引號(hào)包裹的內(nèi)容
var a string = "water" var b string = "你好"
字符串的轉(zhuǎn)義符
\r:回車符\n:換行符\t:制表符\':?jiǎn)我?hào)\":雙引號(hào)\\:反斜杠
多行字符串
在Go中要定義一個(gè)多行字符串時(shí),需要使用反引號(hào)包裹
var a string = `這是 什么 `
反引號(hào)間換行將被作為字符串中的換行,但是所有的轉(zhuǎn)義字符均無(wú)效,文本將會(huì)原樣輸出
常用的操作字符串的手段
name := "water"
zhName := "中國(guó)"
join := []string{"water", "iio"}
len(string)獲取字符長(zhǎng)度
// len fmt.Println(len(name)) => 5 fmt.Println(len(zhName)) => 6 // 一個(gè)漢字占用3個(gè)字符所以是字符的長(zhǎng)度
utf8.RuneCountInString獲取字符串長(zhǎng)度
// utf8.RuneCountInString fmt.Println(utf8.RuneCountInString(name)) => 5 fmt.Println(utf8.RuneCountInString(zhName)) => 2
+/fmt.Sprintf連接字符串
// +/fmt.Sprintf
fmt.Println(zhName + name) => "中國(guó)water"
fmt.Println(fmt.Sprintf("我是%s的%s", zhName, name)) => "我是中國(guó)的water"
strings.Split分割字符串
fmt.Println(strings.Split(name, "")) => [w a t e r]
strings.Contains判斷是否包含子字符串
fmt.Println(strings.Contains(name, "w")) => true
strings.HasPrefix判斷是否以子字符串開(kāi)頭
fmt.Println(strings.HasPrefix(name, "w")) => true
strings.HasSuffix判斷是否以子字符串結(jié)尾
fmt.Println(strings.HasSuffix(name, "r")) => true
strings.Index()判斷子字符串或字符在父字符串中出現(xiàn)的位置(索引)
fmt.Println(strings.Index(name, "r")) => 4
strings.LastIndex()返回子字符串在字符串中最后出現(xiàn)位置的索引( 子字符串的第一個(gè)字符的索引)
fmt.Println(strings.LastIndex("waterte", "te")) => 5
strings.Join(a[]string,sep string)把切片連接成字符串
fmt.Println(strings.Join(join, ",")) => "water,iio"
byte和rune類型
在Go中組成字符串的叫做字符,每個(gè)字符串都有字符組成,一般可以通過(guò)遍歷或者單個(gè)獲取字符串元素獲得字符。字符用單引號(hào)包裹
var a = '我' var b = 't'
在Go中字符有兩種
uint8類型也叫byte型,代表一個(gè)ASCII碼字符rune類型,代表一個(gè)UTF-8字符
當(dāng)需要處理中文、日文或者其他復(fù)合字符時(shí),則需要用到rune類型。rune類型實(shí)際是一個(gè)int32
Go 使用了特殊的 rune 類型來(lái)處理 Unicode,讓基于 Unicode 的文本處理更為方便,也可以使用 byte 型進(jìn)行默認(rèn)字符串處理,性能和擴(kuò)展性都有照顧。
因?yàn)?code>UTF8編碼下一個(gè)中文漢字由3~4個(gè)字節(jié)組成,所以我們不能簡(jiǎn)單的按照字節(jié)去遍歷一個(gè)包含中文的字符串,否則就會(huì)出現(xiàn)上面輸出中第一行的結(jié)果。
字符串底層是一個(gè)byte數(shù)組,所以可以和[]byte類型相互轉(zhuǎn)換。字符串是不能修改的 字符串是由byte字節(jié)組成,所以字符串的長(zhǎng)度是byte字節(jié)的長(zhǎng)度。 rune類型用來(lái)表示utf8字符,一個(gè)rune字符由一個(gè)或多個(gè)byte組成。
修改字符串
要修改字符串,需要先將其轉(zhuǎn)換成[]rune或[]byte,完成后再轉(zhuǎn)換為string。無(wú)論哪種轉(zhuǎn)換,都會(huì)重新分配內(nèi)存,并復(fù)制字節(jié)數(shù)組。
func setString() {
name := "water"
// 強(qiáng)制類型轉(zhuǎn)換
byteName := []byte(name)
byteName[0] = 'm'
fmt.Println(string(byteName))
zhName := "大熊貓"
runeZhName := []rune(zhName)
runeZhName[0] = '小'
fmt.Println(string(runeZhName))
}
=> mater
小熊貓
類型轉(zhuǎn)換
Go語(yǔ)言中只有強(qiáng)制類型轉(zhuǎn)換,沒(méi)有隱式類型轉(zhuǎn)換。該語(yǔ)法只能在兩個(gè)類型之間支持相互轉(zhuǎn)換的時(shí)候使用。
強(qiáng)制類型轉(zhuǎn)換的基本語(yǔ)法如下:
T(表達(dá)式) fmt.Println(string(runeZhName))
小結(jié)
這就是Go中的基礎(chǔ)數(shù)據(jù)類型,也是比較常用的一些數(shù)據(jù)類型,希望對(duì)你有所幫助,更多關(guān)于Go基礎(chǔ)數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類型知識(shí)鞏固
- 夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總
- 淺析Go常量為什么只支持基本數(shù)據(jù)類型
- Go語(yǔ)言數(shù)據(jù)類型簡(jiǎn)單介紹
- 深入了解Golang中的數(shù)據(jù)類型
- Golang數(shù)據(jù)類型比較詳解
- 重學(xué)Go語(yǔ)言之基礎(chǔ)數(shù)據(jù)類型詳解
- 淺析Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組
- Go語(yǔ)言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解
- Go基本數(shù)據(jù)類型的具體使用
相關(guān)文章
golang使用正則表達(dá)式解析網(wǎng)頁(yè)
這篇文章主要介紹了golang使用正則表達(dá)式解析網(wǎng)頁(yè),需要的朋友可以參考下2015-03-03
詳解go-admin在線開(kāi)發(fā)平臺(tái)學(xué)習(xí)(安裝、配置、啟動(dòng))
這篇文章主要介紹了go-admin在線開(kāi)發(fā)平臺(tái)學(xué)習(xí)(安裝、配置、啟動(dòng)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
go語(yǔ)法入門泛型type?parameters簡(jiǎn)稱T(類型形參)兩種場(chǎng)景使用
這篇文章主要為大家介紹了go語(yǔ)法入門泛型type?parameters簡(jiǎn)稱T(類型形參)兩種場(chǎng)景使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
使用Go語(yǔ)言實(shí)現(xiàn)找出兩個(gè)大文件中相同的記錄
這篇文章主要為大家詳細(xì)介紹了使用Go語(yǔ)言實(shí)現(xiàn)找出兩個(gè)大文件中相同的記錄的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10
Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問(wèn)題的解決方案
在 Golang 中,經(jīng)常需要將其他類型(例如 slice、map、struct 等類型)的數(shù)據(jù)轉(zhuǎn)化為 JSON 格式,有時(shí)候轉(zhuǎn)化的結(jié)果并不是預(yù)期中的,例如將一個(gè)空的切片轉(zhuǎn)化為 JSON 時(shí),會(huì)變成"null",所以本文將給大家介紹一下解決方法,需要的朋友可以參考下2023-09-09
如何使用Golang創(chuàng)建與讀取Excel文件
我最近工作忙于作圖,圖表,需要自己準(zhǔn)備數(shù)據(jù)源,所以經(jīng)常和Excel打交道,下面這篇文章主要給大家介紹了關(guān)于如何使用Golang創(chuàng)建與讀取Excel文件的相關(guān)資料,需要的朋友可以參考下2022-07-07

