Go基本數(shù)據(jù)類型的具體使用
概述
在上一節(jié)的內(nèi)容中,我們介紹了Go的基礎(chǔ)語法,包括:標(biāo)識符、關(guān)鍵字、行分隔符、var關(guān)鍵字、:=運(yùn)算符、空格、注釋、package、import、輸入輸出、運(yùn)算符、條件控制、循環(huán)等。在本節(jié)中,我們將介紹Go的基本數(shù)據(jù)類型。Go語言是一種靜態(tài)類型的編程語言,這也就意味著,聲明變量需要指定其具體類型,或者交由編譯器進(jìn)行自動推導(dǎo)。在Go語言中,數(shù)據(jù)類型是編程的基礎(chǔ),它定義了變量或表達(dá)式的存儲方式和行為。
布爾類型
布爾類型(Boolean)用于表示真或假的值,可以為true或false。布爾類型被聲明為bool,可以使用條件語句或邏輯運(yùn)算符進(jìn)行比較和操作。
package main
import "fmt"
func main() {
var success bool = true
if success {
fmt.Println("Success")
} else {
fmt.Println("Failed")
}
}與C/C++語言不同,Go語言中的布爾值并不會隱式轉(zhuǎn)換為數(shù)字值0或1,反之亦然。另外,Go語言也不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型。
package main
import "fmt"
func main() {
var age int = 18
// 不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型,會發(fā)生編譯錯誤
var larger bool = bool(age)
// 布爾值不會隱式轉(zhuǎn)換為數(shù)字值,會發(fā)生編譯錯誤
age = larger
if larger {
fmt.Println("Success")
} else {
fmt.Println("Failed")
}
}整數(shù)類型
整數(shù)類型(Integer)用于表示整數(shù)值,包括正數(shù)、負(fù)數(shù)和零。Go語言同時提供了有符號和無符號的整數(shù)類型,其中有符號整數(shù)包括:int8、int16、int32、int64,分別對應(yīng) 8、16、32、64位大小的有符號整數(shù),無符號整數(shù)包括:uint8、uint16、uint32、uint64,分別對應(yīng) 8、16、32、64位大小的無符號整數(shù)。
另外,還有兩種整數(shù)類型int和uint,分別對應(yīng)特定CPU平臺的字長。其中int表示有符號整數(shù),應(yīng)用最為廣泛,uint表示無符號整數(shù)。由于編譯器和計算機(jī)硬件的不同,int和uint所能表示的整數(shù)大小會在32位和64位之間變化。
注意:盡管在某些特定的運(yùn)行環(huán)境下,int、uint、int32、uint32的大小可能相等,但它們?nèi)匀粚儆诓煌臄?shù)據(jù)類型。比如:int類型的大小可能是32位,但需要把int類型當(dāng)做int32類型使用時,必須顯式對類型進(jìn)行轉(zhuǎn)換,反之亦然。
除了上述的基本整數(shù)類型,Go語言還提供了其他幾種整數(shù)類型,包括:
- rune:該類型表示Unicode碼點(diǎn),通常用來表示一個Unicode字符。
- byte:與uint8是同義詞,表示一個字節(jié)。
- uintptr:該類型的大小不確定,與平臺和編譯器有關(guān),但足以存放指針。uintptr通常用于底層編程,特別是與C程序庫交互的地方。
package main
import "fmt"
func main() {
var num1 int8 = 66
var num2 uint16 = 3666
var num3 int = 99
fmt.Println(num1, num2, num3)
// int不能直接轉(zhuǎn)換為int32,輸出:cannot use num3
// (variable of type int) as int32 value in variable declaration
// var num4 int32 = num3
// 使用類型轉(zhuǎn)換,可以將int轉(zhuǎn)換為int32
var num4 int32 = int32(num3)
fmt.Println(num4)
var num5 byte = 100
fmt.Println(num5)
}浮點(diǎn)數(shù)類型
浮點(diǎn)數(shù)類型(Float)用于表示帶有小數(shù)點(diǎn)的數(shù)值,Go語言提供了float32(32位單精度浮點(diǎn)數(shù))和float64(64位雙精度浮點(diǎn)數(shù))兩種浮點(diǎn)數(shù)類型。單精度浮點(diǎn)數(shù)在內(nèi)存中占用32位(4字節(jié)),可以表示的范圍大約是±1.18E-38到±3.4E+38。雙精度浮點(diǎn)數(shù)在內(nèi)存中占用64位(8字節(jié)),可以表示的范圍更大,大約是±2.23E-308到±1.80E+308。在Go語言中,可以使用關(guān)鍵字float32、float64來分別聲明和初始化單精度浮點(diǎn)數(shù)、雙精度浮點(diǎn)數(shù)。
package main
import "fmt"
import "math"
func main() {
var num1 float32 = 3.1415926535
// 輸出: 3.1415927
fmt.Println(num1)
var num2 float64 = 3.1415926535
// 輸出: 3.1415926535
fmt.Println(num2)
epsilon := 0.00001
num3 := 3.1415926
// 浮點(diǎn)數(shù)比較,輸出:equal
if math.Abs(num2 - num3) < epsilon {
fmt.Println("equal")
} else {
fmt.Println("not equal")
}
}注意:由于浮點(diǎn)數(shù)的精度問題,在進(jìn)行浮點(diǎn)數(shù)計算時可能會產(chǎn)生誤差。為了避免誤差問題,盡量避免進(jìn)行浮點(diǎn)數(shù)比較或直接比較浮點(diǎn)數(shù)的相等性,而應(yīng)使用一個小的容忍度值進(jìn)行比較。
復(fù)數(shù)類型
復(fù)數(shù)類型(Complex)用于表示復(fù)數(shù)值,由實(shí)部和虛部組成。Go語言提供了complex64(64位實(shí)數(shù)和虛數(shù)的復(fù)數(shù))和complex128(128位實(shí)數(shù)和虛數(shù)的復(fù)數(shù))兩種復(fù)數(shù)類型。
package main
import "fmt"
func main() {
var num1 complex64 = 3.14 + 66i
// 輸出復(fù)數(shù)的實(shí)部和虛部,輸出:3.140000 + 66.000000i
fmt.Printf("%f + %fi\n", real(num1), imag(num1))
var num2 complex64 = 10 + 10i
var num = num1 + num2
// 復(fù)數(shù)相加,輸出:13.140000 + 76.000000i
fmt.Printf("%f + %fi\n", real(num), imag(num))
}注意:Go語言的復(fù)數(shù)類型是支持加、減、乘、除等基本運(yùn)算的,可以使用相應(yīng)的運(yùn)算符進(jìn)行復(fù)數(shù)運(yùn)算。
字符串類型
字符串類型(String)用于表示文本數(shù)據(jù),字符串是由零個或多個字符組成的不可變序列。Go語言中的字符串是不可變的字節(jié)序列,每個字符串都由一個指向字節(jié)數(shù)組的指針和長度組成。字符串的長度可以通過len()函數(shù)獲取,而字符串的內(nèi)容可以通過索引訪問。
package main
import "fmt"
func main() {
var str string = "Hello"
length := len(str)
// 輸出字符串長度:5
fmt.Println(length)
// 取第一個字符
firstChar := str[0]
// 取最后一個字符
lastChar := str[len(str) - 1]
// 輸出:H, o
fmt.Printf("%c, %c\n", firstChar, lastChar)
}字符串還可進(jìn)行連接、切片、比較、替換、分割等操作,可參考下面的示例代碼。
package main
import "fmt"
import "strings"
func main() {
var str1 string = "Hello"
str2 := "CSDN"
// 字符串連接,輸出:Hello CSDN
str := str1 + " " + str2
fmt.Println(str)
// 字符串切片,從索引0開始,到索引5結(jié)束(不包括5),輸出:Hello
slice := str[0:5]
fmt.Println(slice)
// 字符串比較,輸出:larger
if str1 > str2 {
fmt.Println("larger")
} else {
fmt.Println("equal or smaller")
}
// 字符串替換,將"CSDN"替換為"Go",第四個參數(shù)為替換的次數(shù),-1表示替換所有匹配的子字符串
newStr := strings.Replace(str, "CSDN", "Go", -1)
// 輸出:Hello Go
fmt.Println(newStr)
// 字符串分割,以空格為分隔符,輸出:[Hello CSDN]
subStrs := strings.Split(str, " ")
fmt.Println(subStrs)
}到此這篇關(guān)于Go基本數(shù)據(jù)類型的具體使用的文章就介紹到這了,更多相關(guān)Go 數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Go語言基礎(chǔ)語法和基本數(shù)據(jù)類型知識鞏固
- 夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總
- 淺析Go常量為什么只支持基本數(shù)據(jù)類型
- Go語言數(shù)據(jù)類型簡單介紹
- 深入了解Golang中的數(shù)據(jù)類型
- Golang數(shù)據(jù)類型比較詳解
- Go語言中的基礎(chǔ)數(shù)據(jù)類型使用實(shí)例
- 重學(xué)Go語言之基礎(chǔ)數(shù)據(jù)類型詳解
- 淺析Go語言的數(shù)據(jù)類型及數(shù)組
- Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解
相關(guān)文章
golang如何用http.NewRequest創(chuàng)建get和post請求
這篇文章主要介紹了golang如何用http.NewRequest創(chuàng)建get和post請求問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
一文理解Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn)
本文主要介紹了Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Go語言學(xué)習(xí)之函數(shù)的定義與使用詳解
這篇文章主要為大家詳細(xì)介紹Go語言中函數(shù)的定義與使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下2022-04-04

