最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總

 更新時(shí)間:2023年10月19日 10:18:47   作者:帽兒山的槍手  
這篇文章主要8為大家介紹了夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助

類型匯總

Go 語言中,主要分為值類型主要分為三部分: 整型、浮點(diǎn)型和其他類型。

// 整型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
// 浮點(diǎn)型、復(fù)數(shù)
float32 float64 complex128 complex64
// 其他類型
bool byte rune string error

整型

Go語言同時(shí)提供了有符號(hào)和無符號(hào)類型的整數(shù)運(yùn)算。

int int8 int16 int32 有符合和無符號(hào)類型

這里有int8、int16、int32和int64四種截然不同大小的有符號(hào)整數(shù)類型,分別對(duì)應(yīng)8、16、32、64bit大小的有符號(hào)整數(shù),與此對(duì)應(yīng)的是uint8、uint16、uint32和uint64四種無符號(hào)整數(shù)類型。

這里還有兩種一般對(duì)應(yīng)特定CPU平臺(tái)機(jī)器字大小的有符號(hào)和無符號(hào)整數(shù)int和uint;其中int是應(yīng)用最廣泛的數(shù)值類型。這兩種類型都有同樣的大小,32或64bit,但是我們不能對(duì)此做任何的假設(shè);因?yàn)椴煌木幾g器即使在相同的硬件平臺(tái)上可能產(chǎn)生不同的大小。

uintptr 類型

uintptr 是一種無符號(hào)的整數(shù)類型 ,沒有指定具體的bit大小但是足以容納指針。uintptr 類型只有在底層編程時(shí)才需要,特別是Go語言和C語言函數(shù)庫或操作系統(tǒng)接口相交互的地方。

不管它們的具體大小,int、uint 和 uintptr 是不同類型的兄弟類型。其中int和int32也是不同的類型,即使int的大小也是32bit,在需要將int當(dāng)作int32類型的地方需要一個(gè)顯式的類型轉(zhuǎn)換操作,反之亦然。

類型值范圍

類型名稱大小描述
int8 字節(jié)int的大小是和操作系統(tǒng)位數(shù)相關(guān)的,如果是32位操作系統(tǒng),int類型的大小是4字節(jié);如果是64位操作系統(tǒng),int類型的大小就是8個(gè)字節(jié)
int81 字節(jié)無符號(hào)整數(shù)的所有bit位都用于表示非負(fù)數(shù),值域是0到$2^n-1$。例如,int8類型整數(shù)的值域是從-128到127,而uint8類型整數(shù)的值域是從0到255。
int162 字節(jié)有符號(hào)int16類型整數(shù)值域是從 -32768 ~ 32767,而無符號(hào)uint16類型整數(shù)值域是從 0 ~ 65535
int324 字節(jié)有符號(hào)int32類型整數(shù)值域是從 -2147483648 ~ 2147483647,而無符號(hào)uint32類型整數(shù)值域是從 0 ~ 4294967295
int648 字節(jié)有符號(hào)int64類型整數(shù)值域是從 -9223372036854775808 ~ 9223372036854775807,而無符號(hào)uint64類型整數(shù)值域是從 0 ~ 18446744073709551615
uintptr長度4或8字節(jié)存儲(chǔ)指針的uint32 或 uint64整數(shù)

取值范圍示例

package main
import (
  "fmt"
  "math"
  "unsafe"
)
func main() {
  fmt.Println("各int類型的大小: ")
  var i1 int = 1
  var i2 int8 = 2
  var i3 int16 = 3
  var i4 int32 = 4
  var i5 int64 = 5
  var i6 uint64 = 6
  fmt.Printf("int        : %v\n", unsafe.Sizeof(i1))
  fmt.Printf("int8    : %v\n", unsafe.Sizeof(i2))
  fmt.Printf("int16    : %v\n", unsafe.Sizeof(i3))
  fmt.Printf("int32    : %v\n", unsafe.Sizeof(i4))
  fmt.Printf("int64    : %v\n", unsafe.Sizeof(i5))
  fmt.Printf("uint64: %v\n", unsafe.Sizeof(i6))
  // 輸出各int類型的取值范圍
  fmt.Println("int8:", math.MinInt8, "~", math.MaxInt8)
  fmt.Println("int16:", math.MinInt16, "~", math.MaxInt16)
  fmt.Println("int32:", math.MinInt32, "~", math.MaxInt32)
  fmt.Println("int64:", math.MinInt64, "~", math.MaxInt64)
  fmt.Println()
  // n是自動(dòng)推導(dǎo)類型
  n := 1234567890
  fmt.Printf("n := 1234567890 的默認(rèn)類型為: %T\n", n)
  fmt.Printf("int類型的字節(jié)數(shù)為: %v\n\n", unsafe.Sizeof(n))
  // 初始化一個(gè)32位整型值
  var a int32 = 987654321
  fmt.Println("var a int32 = 987654321")
  // 輸出變量的十六進(jìn)制形式和十進(jìn)制
  fmt.Printf("int32: 十六進(jìn)制為0x%x, 十進(jìn)制為%d\n", a, a)
  // 將a轉(zhuǎn)換為int8類型, 發(fā)生數(shù)值截?cái)?
  b := int8(a)
  fmt.Printf("int8: 十六進(jìn)制0x%x, 十進(jìn)制為%d\n", b, b)
  // 將a轉(zhuǎn)換為int16類型, 發(fā)生數(shù)值截?cái)?
  c := int16(a)
  fmt.Printf("int16: 十六進(jìn)制為0x%x, 十進(jìn)制%d\n", c, c)
  // 將a轉(zhuǎn)換為int64類型
  d := int64(a)
  fmt.Printf("int64: 十六進(jìn)制為0x%x, 十進(jìn)制%d\n", d, d)
}

浮點(diǎn)型

浮點(diǎn)數(shù)類型的取值范圍可以從很微小到很巨大。浮點(diǎn)數(shù)的范圍極限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大數(shù)值,大約是 3.4e38;對(duì)應(yīng)的 math.MaxFloat64 常量大約是1.8e308。它們分別能表示的最小值近似為1.4e-454.9e-324

上述值,以科學(xué)計(jì)數(shù)法表示

列如:e38 就是小數(shù)點(diǎn)向右移動(dòng)38位

? e-35 就是小數(shù)點(diǎn)向左移動(dòng)35位

float32、float64 類型

一個(gè)float32類型的浮點(diǎn)數(shù)可以提供大約6個(gè)十進(jìn)制數(shù)的精度,而float64則可以提供約15個(gè)十進(jìn)制數(shù)的精度;通常應(yīng)該優(yōu)先使用float64類型,因?yàn)閒loat32類型的累計(jì)計(jì)算誤差很容易擴(kuò)散,并且float32能精確表示的正整數(shù)并不是很大(譯注:因?yàn)閒loat32的有效bit位只有23個(gè),其它的bit位用于指數(shù)和符號(hào);當(dāng)整數(shù)大于23bit能表達(dá)的范圍時(shí),float32的表示將出現(xiàn)誤差)

complex64、complex128 類型

Go語言提供了兩種精度的復(fù)數(shù)類型:complex64 和 complex128,分別對(duì)應(yīng) float32 和 float64 兩種浮點(diǎn)數(shù)精度。

實(shí)際上,complex64類型的值會(huì)由兩個(gè)float32類型的值分別表示復(fù)數(shù)的實(shí)數(shù)部分和虛數(shù)部分。 complex128類型的值會(huì)由兩個(gè)float64類型的值分別表示復(fù)數(shù)的實(shí)數(shù)部分和虛數(shù)部分。

復(fù)數(shù)類型的值一般由浮點(diǎn)數(shù)表示的實(shí)數(shù)部分、加號(hào)“+”、浮點(diǎn)數(shù)表示的虛數(shù)部分,以及小寫字母“i”組成。比如, 3.7E+1 + 5.98E-2i 。正因?yàn)閺?fù)數(shù)類型的值由兩個(gè)浮點(diǎn)數(shù)類型值組成,所以其表示法的規(guī)則自然需遵從浮點(diǎn)數(shù)類型的值表示法的相關(guān)規(guī)則。

舉例,內(nèi)置的complex函數(shù)用于構(gòu)建復(fù)數(shù),內(nèi)建的real和imag函數(shù)分別返回復(fù)數(shù)的實(shí)部和虛部:

var x complex128 = complex(1, 2)

類型值范圍

類型名稱大小描述
float324 字節(jié)單精度類型,占據(jù)4個(gè)字節(jié)byte,32個(gè)二進(jìn)制位bit
float648 字節(jié)雙精度類型比單精度類型更能精確地表示一個(gè)小數(shù),但是占用的內(nèi)存空間也比較大。
complex648 字節(jié)包含兩個(gè)float32類型表示復(fù)數(shù)
complex12816 字節(jié)包含兩個(gè)float64類型表示復(fù)數(shù)

布爾型

布爾類型的值只有兩種:true 和 false。if和for語句的條件部分都是布爾類型的值,并且==和<等比較操作也會(huì)產(chǎn)生布爾型的值。一元操作符!對(duì)應(yīng)邏輯非操作,因此!true的值為false,更羅嗦的說法是(!true==false)==true,雖然表達(dá)方式不一樣,不過我們一般會(huì)采用簡潔的布爾表達(dá)式,就像用x來表示x==true。

使用

數(shù)字到布爾類型的轉(zhuǎn)換

func itob(i int) bool { 
    return i != 0
}

rune 類型

rune 類型是和 int32 類型等價(jià),在所有方面都等同于 int32,按照約定,它用于區(qū)分字符值和整數(shù)值。

常用來處理 unicode 或 utf-8 字符,通常用于表示一個(gè)Unicode碼點(diǎn),這兩個(gè)名稱可以互換使用。

說的通俗一點(diǎn)就是 rune 一個(gè)值代表的就是一個(gè) Unicode 字符,它的最大特點(diǎn)就是可變長。它可以使用 1 - 4個(gè)字節(jié)表示一個(gè)字符,根據(jù)字符的不同變換長度。所以使用int32 類型范圍就可以完美適配。 單個(gè)中文占 2 個(gè)字節(jié),單個(gè)英文占 2 個(gè)字節(jié)。

因?yàn)?Go 語言中字符串編碼為 UTF-8 ,英文占 1 個(gè)字節(jié),中文占 3 個(gè)字節(jié)。 占用空間相比之下會(huì)更大

使用

計(jì)算中文字符

package main

import (
    "fmt"
)

func main() {
    var data = "帽兒山的槍手"
    fmt.Println("data length", len(data))
    fmt.Println("data word length", len([]rune(data)))
}

程序輸出

data length 18
data word length 6

具體原因

len() 函數(shù)是用來獲取字符串的字節(jié)長度

在 utf-8 編碼中,英文占 1 個(gè)字節(jié),中文占 3 個(gè)字節(jié)

rune 一個(gè)值代表的就是一個(gè) Unicode 字符,所以求 rune 切片的長度就是字符個(gè)數(shù)。

byte 類型

同樣 byte也是uint8類型 的等價(jià)類型,byte類型一般用于強(qiáng)調(diào)數(shù)值是一個(gè)原始的數(shù)據(jù)而不是一個(gè)小的整數(shù)。

使用

字符串和字節(jié)slice之間可以相互轉(zhuǎn)換

s := "abc"
b := []byte(s)
s2 := string(b)

string 類型

string 是 8 位字節(jié)的集合,通常但不一定代表UTF-8編碼的文本。string可以為空,但不能為nil。

字符串是一個(gè)不可改變的字節(jié)序列。 字符串可以包含任意的數(shù)據(jù),包括byte值0, 但是通常是用來包含人類刻度的文本。文本字符串通常被解釋為采用UTF8編碼的Unicode碼點(diǎn)(rune)序列。

字符串底層是一個(gè)byte數(shù)組,所以可以和[]byte類型相互轉(zhuǎn)換。字符串是不能修改字符串是由byte字節(jié)組成,所以字符串的長度是byte字節(jié)的長度。

Go語言源文件總是用UTF8編碼, 并且Go語言的文本字符串也是以UTF8編碼的方式處理,因此我們可以將Unicode碼點(diǎn)也寫到字符串面值中。

使用

拼接字符串

package main
import (
    "fmt"
)
func main(){
    // %d 表示整形數(shù)字, %s 表示字符串
    var stockcode int = 123
    var enddate string = "2022-01-18"
    var url string = "Code=%d&endDate=%s"
    var target_url = fmt.Sprintf(url, stockcode, enddate)
    fmt.Println(target_url)
}

error 類型

error 類型是 Go 語言的一種內(nèi)置類型,使用的時(shí)候不用特定去import,它本質(zhì)上是一個(gè)接口。

type error interface{
  Error() string //Error()是每一個(gè)訂制的error對(duì)象需要填充的錯(cuò)誤消息,可以理解成是一個(gè)字段Error
}

使用

封裝自定義錯(cuò)誤類型

package main
import (
    "fmt"
    "errors"
)
type Error struct {
    err error
}
func (e Error) MyError() string {
    return e.err.Error()
}
func main() {
    err := Error {
        errors.New("test error"),
    }
    fmt.Println(err.MyError())
}

以上就是夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總的詳細(xì)內(nèi)容,更多關(guān)于Golang數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go進(jìn)階之定時(shí)器Ticker的實(shí)現(xiàn)示例

    Go進(jìn)階之定時(shí)器Ticker的實(shí)現(xiàn)示例

    本文主要介紹了Go進(jìn)階之定時(shí)器Ticker的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • Go語言排序算法:快速、可靠的排序解決方案

    Go語言排序算法:快速、可靠的排序解決方案

    Go語言提供了多種快速、可靠的排序算法,可以滿足不同場景下的排序需求,其中最常用的排序算法包括快速排序、歸并排序和堆排序,需要的朋友可以參考下
    2023-10-10
  • Golang執(zhí)行cmd命令行的方法

    Golang執(zhí)行cmd命令行的方法

    本文主要介紹了Golang執(zhí)行cmd命令行的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解go中panic源碼解讀

    詳解go中panic源碼解讀

    這篇文章主要介紹了go中panic源碼解讀,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • golang語法使用的注意事項(xiàng)

    golang語法使用的注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于golang語法使用的一些注意事項(xiàng),Golang是一種靜態(tài)類型的編程語言,它支持基本的數(shù)據(jù)類型,包括整型、浮點(diǎn)型、布爾型、字符串型,需要的朋友可以參考下
    2023-07-07
  • golang中按照結(jié)構(gòu)體的某個(gè)字段排序?qū)嵗a

    golang中按照結(jié)構(gòu)體的某個(gè)字段排序?qū)嵗a

    在任何編程語言中,關(guān)乎到數(shù)據(jù)的排序都會(huì)有對(duì)應(yīng)的策略,下面這篇文章主要給大家介紹了關(guān)于golang中按照結(jié)構(gòu)體的某個(gè)字段排序的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Go語言中的map擴(kuò)容機(jī)制

    Go語言中的map擴(kuò)容機(jī)制

    Go語言中的map是一種高效的數(shù)據(jù)結(jié)構(gòu),其擴(kuò)容機(jī)制確保了在大數(shù)據(jù)量情況下的性能,本文介紹了包括擴(kuò)容觸發(fā)條件、擴(kuò)容過程和漸進(jìn)式擴(kuò)容,感興趣的可以了解一下
    2024-12-12
  • Golang使用Gin創(chuàng)建Restful API的實(shí)現(xiàn)

    Golang使用Gin創(chuàng)建Restful API的實(shí)現(xiàn)

    本文主要介紹了Golang使用Gin創(chuàng)建Restful API的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • go中實(shí)現(xiàn)字符切片和字符串互轉(zhuǎn)

    go中實(shí)現(xiàn)字符切片和字符串互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了go語言中如何實(shí)現(xiàn)字符切片和字符串互轉(zhuǎn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-11-11
  • 深入學(xué)習(xí)Golang的流程控制

    深入學(xué)習(xí)Golang的流程控制

    Go 語言是一門現(xiàn)代化的編程語言,以其簡潔高效、并發(fā)安全等特點(diǎn)被越來越多的開發(fā)者所使用。本文將深入探討 Go 語言中的流程控制,包括條件語句、循環(huán)語句以及控制語句等方面
    2023-05-05

最新評(píng)論

蒙山县| 江陵县| 肃宁县| 江陵县| 广州市| 昌邑市| 贺州市| 红原县| 绩溪县| 萝北县| 康乐县| 东平县| 竹北市| 福安市| 湟中县| 东莞市| 伊吾县| 会昌县| 乌审旗| 邵东县| 林芝县| 逊克县| 莱芜市| 威远县| 思南县| 米脂县| 太仓市| 永吉县| 安泽县| 星座| 阿瓦提县| 镇安县| 资源县| 沁阳市| 东港市| 永和县| 玛沁县| 荣成市| 连云港市| 呼和浩特市| 马山县|