溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Golang中的數(shù)據(jù)類(lèi)型有哪些及怎么定義使用

發(fā)布時(shí)間:2023-05-05 09:53:20 來(lái)源:億速云 閱讀:88 作者:zzz 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Golang中的數(shù)據(jù)類(lèi)型有哪些及怎么定義使用”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Golang中的數(shù)據(jù)類(lèi)型有哪些及怎么定義使用”文章能幫助大家解決問(wèn)題。

    1. 基本數(shù)據(jù)類(lèi)型

    Golang 的基本數(shù)據(jù)類(lèi)型包括整數(shù)型、浮點(diǎn)型、布爾型、字符型等。以下是各個(gè)類(lèi)型的介紹以及代碼示例。

    1.1 整數(shù)型

    Golang 提供了多種整數(shù)類(lèi)型,如 int8、int16、int32、int64、uint8、uint16、uint32、uint64 等。它們的位數(shù)和范圍不同,選擇合適的類(lèi)型可以提高程序的效率。

    以下是一些整數(shù)類(lèi)型的定義和范圍:

    類(lèi)型位數(shù)最小值最大值
    int88-128127
    int1616-3276832767
    int3232-21474836482147483647
    int6464-92233720368547758089223372036854775807
    uint880255
    uint1616065535
    uint323204294967295
    uint6464018446744073709551615

    可以使用 var 關(guān)鍵字定義一個(gè)整數(shù)類(lèi)型的變量,并賦初值,例如:

     var num1 int32 = 100
     var num2 uint64 = 1000000

    在 Golang 中,可以使用加減乘除、求余等算術(shù)運(yùn)算符對(duì)整數(shù)型數(shù)據(jù)進(jìn)行操作。例如:

     num1 := 10
     num2 := 3
     fmt.Println(num1 + num2) // 輸出:13
     fmt.Println(num1 - num2) // 輸出:7
     fmt.Println(num1 * num2) // 輸出:30
     fmt.Println(num1 / num2) // 輸出:3
     fmt.Println(num1 % num2) // 輸出:1

    另外,整數(shù)型還支持位運(yùn)算符,如左移、右移、按位與、按位或等。例如:

     num1 := 1 << 2 // num1 = 4,1 左移 2 位相當(dāng)于乘以 2 的 2 次方
     num2 := 7 >> 1 // num2 = 3,7 右移 1 位相當(dāng)于除以 2
     num3 := 5 & 3  // num3 = 1,5 的二進(jìn)制為 101,3 的二進(jìn)制為 011,按位與后為 001,即 1
     num4 := 5 | 3  // num4 = 7,5 的二進(jìn)制為 101,3 的二進(jìn)制為 011,按位或后為 111,即 7

    1.2 Golang 提供了兩種浮點(diǎn)型數(shù)據(jù)類(lèi)型:

    float32 和 float64。它們分別占用 32 位和 64 位,可以用于表示小數(shù)。

    以下是兩種浮點(diǎn)型數(shù)據(jù)類(lèi)型的定義和范圍:

    類(lèi)型位數(shù)最小值最大值
    float3232-3.4E+383.4E+38
    float6464-1.7E+3081.7E+308

    可以使用 var 關(guān)鍵字定義一個(gè)浮點(diǎn)型變量,并賦初值,例如:

     var num1 float32 = 3.1415926
     var num2 float64 = 3.14159265358979323846

    在 Golang 中,可以使用加減乘除等算術(shù)運(yùn)算符對(duì)浮點(diǎn)型數(shù)據(jù)進(jìn)行操作。例如:

     num1 := 1.2
     num2 := 2.5
     fmt.Println(num1 + num2) // 輸出:3.7
     fmt.Println(num1 - num2) // 輸出:-1.3
     fmt.Println(num1 * num2) // 輸出:3
     fmt.Println(num1 / num2) // 輸出:0.48

    浮點(diǎn)型的計(jì)算結(jié)果可能存在精度問(wèn)題,因此需要使用 math 包中的函數(shù)對(duì)浮點(diǎn)型數(shù)據(jù)進(jìn)行處理。例如,要計(jì)算 sin 函數(shù)的值,可以使用 math 包中的 Sin 函數(shù):

     import "math"
    
     num := math.Sin(1.0) // 計(jì)算 sin(1.0)

    1.3 布爾型

    Golang 的布爾型只有兩個(gè)值:true 和 false。可以使用 var 關(guān)鍵字定義一個(gè)布爾型變量,并賦初值,例如:

     var b1 bool = true
     var b2 bool = false

    在 Golang 中,可以使用邏輯運(yùn)算符對(duì)布爾型數(shù)據(jù)進(jìn)行操作。例如:

     b1 := true
     b2 := false
     fmt.Println(b1 && b2) // 輸出:false,邏輯與運(yùn)算,只有兩個(gè)操作數(shù)都為 true 時(shí),結(jié)果才為 true
     fmt.Println(b1 || b2) // 輸出:true,邏輯或運(yùn)算,只有兩個(gè)操作數(shù)都為 false 時(shí),結(jié)果才為 false
     fmt.Println(!b1)     // 輸出:false,邏輯非運(yùn)算,操作數(shù)為 true 時(shí),結(jié)果為 false,操作數(shù)為 false 時(shí),結(jié)果為 true

    1.4 字符型

    Golang 的字符型數(shù)據(jù)類(lèi)型使用單引號(hào)括起來(lái),如 'a'、'0' 等。字符型數(shù)據(jù)可以和整數(shù)型數(shù)據(jù)相互轉(zhuǎn)換。

    以下是字符型數(shù)據(jù)類(lèi)型的定義和范圍:

    類(lèi)型位數(shù)最小值最大值
    byte80255
    rune32-21474836482147483647

    其中,byte 類(lèi)型等價(jià)于 uint8,rune 類(lèi)型等價(jià)于 int32。

    可以使用 var 關(guān)鍵字定義一個(gè)字符型變量,并賦初值,例如:

     var ch2 byte = 'a'

    在 Golang 中,可以使用字符型數(shù)據(jù)和整數(shù)型數(shù)據(jù)相互轉(zhuǎn)換。例如,將一個(gè)字符型數(shù)據(jù)轉(zhuǎn)換成整數(shù)型數(shù)據(jù),可以使用 int 類(lèi)型的轉(zhuǎn)換,例如:

     ch := 'a'
     fmt.Println(int(ch)) // 輸出:97,將字符型數(shù)據(jù) a 轉(zhuǎn)換成整數(shù)型數(shù)據(jù)

    將一個(gè)整數(shù)型數(shù)據(jù)轉(zhuǎn)換成字符型數(shù)據(jù),可以使用字符型數(shù)據(jù)的轉(zhuǎn)換。例如:

     num := 97
     fmt.Println(string(num)) // 輸出:a,將整數(shù)型數(shù)據(jù) 97 轉(zhuǎn)換成字符型數(shù)據(jù)

    1.5 字符串型

    Golang 的字符串型數(shù)據(jù)類(lèi)型使用雙引號(hào)括起來(lái),如 "hello, world!"。字符串是一組字符的集合,可以包含任意數(shù)量的字符。

    以下是字符串型數(shù)據(jù)類(lèi)型的定義和范圍:

    類(lèi)型位數(shù)最小值最大值
    string不定不定不定

    可以使用 var 關(guān)鍵字定義一個(gè)字符串型變量,并賦初值,例如:

     var str string = "hello, world!"

    在 Golang 中,可以使用加號(hào)運(yùn)算符將兩個(gè)字符串拼接起來(lái)。例如:

     str1 := "hello"
     str2 := "world"
     fmt.Println(str1 + " " + str2) // 輸出:hello world

    可以使用 len() 函數(shù)獲取字符串的長(zhǎng)度,例如:

     str := "hello, world!"
     fmt.Println(len(str)) // 輸出:13,字符串長(zhǎng)度為 13

    Golang 中還提供了一些字符串處理函數(shù),例如:

    • strings.Contains(str, substr):判斷字符串 str 是否包含子字符串 substr。

    • strings.HasPrefix(str, prefix):判斷字符串 str 是否以 prefix 開(kāi)頭。

    • strings.HasSuffix(str, suffix):判斷字符串 str 是否以 suffix 結(jié)尾。

    • strings.Index(str, substr):查找子字符串 substr 在字符串 str 中第一次出現(xiàn)的位置,如果不存在則返回 -1。

    • strings.LastIndex(str, substr):查找子字符串 substr 在字符串 str 中最后一次出現(xiàn)的位置,如果不存在則返回 -1。

    • strings.Replace(str, old, new, n):將字符串 str 中的前 n 個(gè) old 子字符串替換為 new 子字符串。

    • strings.Split(str, sep):將字符串 str 按照 sep 分割成多個(gè)子字符串,返回一個(gè)字符串?dāng)?shù)組。

    例如,要將字符串 "hello, world!" 中的 "hello" 替換為 "hi",可以使用 strings.Replace() 函數(shù):

     str := "hello, world!"
     newStr := strings.Replace(str, "hello", "hi", 1)
     fmt.Println(newStr) // 輸出:hi, world!

    2. 復(fù)合數(shù)據(jù)類(lèi)型

    Golang 中的復(fù)合數(shù)據(jù)類(lèi)型包括數(shù)組、切片、映射和結(jié)構(gòu)體。

    2.1 數(shù)組

    Golang 中的數(shù)組是一組固定長(zhǎng)度、同類(lèi)型的元素序列,可以使用下標(biāo)來(lái)訪問(wèn)數(shù)組中的元素。

    可以使用 var 關(guān)鍵字定義一個(gè)數(shù)組,并賦初值,例如:

     var arr [5]int

    以上代碼定義了一個(gè)長(zhǎng)度為5 的整型數(shù)組,初始值為 [0 0 0 0 0]。

    可以使用以下語(yǔ)法訪問(wèn)數(shù)組中的元素:

     arr[index]

    其中,index 表示要訪問(wèn)的元素下標(biāo),從 0 開(kāi)始計(jì)數(shù)。

    例如,要訪問(wèn)數(shù)組 arr 中的第一個(gè)元素,可以使用以下語(yǔ)法:

     arr[0]

    以上代碼將數(shù)組 arr 中的第一個(gè)元素修改為 1。

    可以使用 len() 函數(shù)獲取數(shù)組的長(zhǎng)度,例如:

     fmt.Println(len(arr)) // 輸出:5,數(shù)組長(zhǎng)度為 5

    可以使用 for 循環(huán)遍歷數(shù)組中的元素,例如:

     for i := 0; i < len(arr); i++ {
         fmt.Println(arr[i])
     }

    Golang 中還提供了 range 關(guān)鍵字,可以用于遍歷數(shù)組中的元素。例如:

     for i, v := range arr {
         fmt.Printf("arr[%d] = %d\n", i, v)
     }

    以上代碼將遍歷數(shù)組 arr 中的所有元素,并輸出每個(gè)元素的下標(biāo)和值。

    在 Golang 中,還可以使用 { } 定義數(shù)組時(shí)指定初始值,例如:

     arr := [5]int{1, 2, 3, 4, 5}

    以上代碼定義了一個(gè)長(zhǎng)度為 5 的整型數(shù)組,并指定了初始值為 [1 2 3 4 5]。

    2.2 切片

    Golang 中的切片是一種動(dòng)態(tài)數(shù)組,可以根據(jù)需要?jiǎng)討B(tài)增加或減少元素個(gè)數(shù)。

    可以使用 make() 函數(shù)創(chuàng)建一個(gè)切片,并指定長(zhǎng)度和容量。例如:

     slice := make([]int, 5, 10)

    以上代碼創(chuàng)建了一個(gè)長(zhǎng)度為 5、容量為 10 的整型切片,初始值為 [0 0 0 0 0]。

    切片的長(zhǎng)度可以使用 len() 函數(shù)獲取,容量可以使用 cap() 函數(shù)獲取。例如:

     fmt.Println(len(slice)) // 輸出:5,切片長(zhǎng)度為 5
     fmt.Println(cap(slice)) // 輸出:10,切片容量為 10

    可以使用 append() 函數(shù)向切片中添加元素。例如:

     slice := make([]int, 5, 10)
     slice = append(slice, 1, 2, 3)

    以上代碼向切片 slice 中添加了三個(gè)元素,切片長(zhǎng)度變?yōu)?8,容量不變。

    可以使用切片表達(dá)式獲取切片中的子切片。切片表達(dá)式的語(yǔ)法為:

     slice[low:high]

    其中,low 表示子切片的起始下標(biāo)(包含),high 表示子切片的結(jié)束下標(biāo)(不包含)。

    例如,要獲取切片 slice 中的第二個(gè)元素到第四個(gè)元素(不包含),可以使用以下語(yǔ)法:

     newSlice := slice[1:4]

    以上代碼將返回一個(gè)新的切片 newSlice,其中包含 slice 中的第二個(gè)、第三個(gè)和第四個(gè)元素。

    可以使用 range 關(guān)鍵字遍歷切片中的元素。例如:

     slice := []int{1, 2, 3, 4, 5}
     for i, v := range slice {
         fmt.Printf("slice[%d] = %d\n", i, v)
     }

    以上代碼將遍歷切片 slice 中的所有元素,并輸出每個(gè)元素的下標(biāo)和值。

    2.3 字符串

    Golang 中的字符串是不可變的,即一旦創(chuàng)建,就不能修改其值。

    可以使用雙引號(hào)或反引號(hào)定義一個(gè)字符串。例如:

     str1 := "hello"
     str2 := `world`

    以上代碼分別定義了兩個(gè)字符串 str1 和 str2,其值分別為 "hello" 和 "world"。

    字符串可以使用 + 運(yùn)算符連接,例如:

     str := str1 + " " + str2
     fmt.Println(str) // 輸出:hello world

    可以使用 len() 函數(shù)獲取字符串的長(zhǎng)度,例如:

     fmt.Println(len(str)) // 輸出:11,字符串長(zhǎng)度為 11

    可以使用索引訪問(wèn)字符串中的字符,例如:

     ch := str[0]
     fmt.Println(ch) // 輸出:104,字符 'h' 的 ASCII 碼值為 104

    可以使用 for 循環(huán)遍歷字符串中的字符,例如:

     for i := 0; i < len(str); i++ {
         ch := str[i]
         fmt.Printf("%c ", ch)
     }

    以上代碼將遍歷字符串 str 中的所有字符,并輸出每個(gè)字符。

    字符串可以轉(zhuǎn)換為字節(jié)數(shù)組([]byte)或字符數(shù)組([]rune),例如:

     bytes := []byte(str)
     runes := []rune(str)

    以上代碼分別將字符串 str 轉(zhuǎn)換為字節(jié)數(shù)組 bytes 和字符數(shù)組 runes。

    2.4 映射

    Golang 中的映射是一種無(wú)序的鍵值對(duì)集合,可以根據(jù)鍵來(lái)獲取值。

    可以使用 make() 函數(shù)創(chuàng)建一個(gè)映射。例如:

     m := make(map[string]int)

    以上代碼創(chuàng)建了一個(gè)空映射 m,其鍵的類(lèi)型為字符串,值的類(lèi)型為整型。

    可以使用以下語(yǔ)法向映射中添加鍵值對(duì):

     m[key] = value

    其中,key 表示要添加的鍵,value 表示要添加的值。

    例如,要向映射 m 中添加鍵為 "a",值為 1 的鍵值對(duì),可以使用以下語(yǔ)法:

     m["a"] = 1

    可以使用以下語(yǔ)法獲取映射中指定鍵的值:

     value = m[key]

    其中,key 表示要獲取值的鍵,value 表示要獲取的值。

    例如,要獲取映射 m 中鍵為 "a" 的值,可以使用以下語(yǔ)法:

     value := m["a"]

    如果映射中不存在指定的鍵,則返回值類(lèi)型的默認(rèn)值。

    可以使用 delete() 函數(shù)刪除映射中指定的鍵值對(duì)。例如:

     delete(m, key)

    其中,m 表示要?jiǎng)h除鍵值對(duì)的映射,key 表示要?jiǎng)h除的鍵。

    例如,要?jiǎng)h除映射 m 中鍵為 "a" 的鍵值對(duì),可以使用以下語(yǔ)法:

     delete(m, "a")

    可以使用 range 關(guān)鍵字遍歷映射中的鍵值對(duì)。例如:

     m := map[string]int{"a": 1, "b": 2, "c": 3}
     for k, v := range m {
         fmt.Printf("m[%s] = %d\n", k, v)
     }

    以上代碼將遍歷映射 m 中的所有鍵值對(duì),并輸出每個(gè)鍵值對(duì)的鍵和值。

    2.5 結(jié)構(gòu)體

    Golang 中的結(jié)構(gòu)體是一種自定義類(lèi)型,它由一組字段組成。

    可以使用 type 關(guān)鍵字定義一個(gè)結(jié)構(gòu)體類(lèi)型。例如:

     type Person struct {
         Name string
         Age  int
     }

    以上代碼定義了一個(gè)名為 Person 的結(jié)構(gòu)體類(lèi)型,它包含兩個(gè)字段:Name 和 Age。

    可以使用以下語(yǔ)法創(chuàng)建一個(gè)結(jié)構(gòu)體實(shí)例:

     p := Person{Name: "Tom", Age: 18}

    其中,Person 表示要?jiǎng)?chuàng)建的結(jié)構(gòu)體類(lèi)型,Name 和 Age 表示要初始化的字段和值。

    可以使用以下語(yǔ)法訪問(wèn)結(jié)構(gòu)體實(shí)例的字段:

     p.Name
     p.Age

    其中,p 表示要訪問(wèn)的結(jié)構(gòu)體實(shí)例,Name 和 Age 表示要訪問(wèn)的字段。

    例如,要訪問(wèn)結(jié)構(gòu)體實(shí)例 p 的 Name 字段,可以使用以下語(yǔ)法:

     name := p.Name

    結(jié)構(gòu)體可以嵌套在其他結(jié)構(gòu)體中,形成嵌套結(jié)構(gòu)體。例如:

     type Address struct {
         Province string
         City     string
     }
    
     type Person struct {
         Name    string
         Age     int
         Address Address
     }

    以上代碼定義了兩個(gè)結(jié)構(gòu)體類(lèi)型:Address 和 Person。Person 結(jié)構(gòu)體中包含一個(gè) Address 類(lèi)型的字段 Address。

    可以使用以下語(yǔ)法創(chuàng)建一個(gè) Person 結(jié)構(gòu)體實(shí)例:

     p := Person{
         Name: "Tom",
         Age:  18,
         Address: Address{
             Province: "Guangdong",
             City:     "Shenzhen",
         },
     }

    可以使用以下語(yǔ)法訪問(wèn)嵌套結(jié)構(gòu)體中的字段:

     p.Address.Province
     p.Address.City

    例如,要訪問(wèn) Person 結(jié)構(gòu)體實(shí)例 p 中 Address 字段的 Province 字段,可以使用以下語(yǔ)法:

     province := p.Address.Province

    關(guān)于“Golang中的數(shù)據(jù)類(lèi)型有哪些及怎么定義使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI