go語言的10種數(shù)據(jù)類型介紹

今天小編給大家分享的是go語言的10種數(shù)據(jù)類型介紹,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會(huì)有所收獲的哦。

吉州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

go語言的數(shù)據(jù)類型有:1、布爾型,值只可以是常量true或false;2、數(shù)字類型,支持整型和浮點(diǎn)型數(shù)字,并且支持復(fù)數(shù);3、字符串類型,是一串固定長(zhǎng)度的字符連接起來的字符序列;4、指針類型;5、數(shù)組類型;6、結(jié)構(gòu)化類型;7、Channel類型;8、函數(shù)類型;9、切片類型;10、接口類型;11、Map類型。

Go 語言數(shù)據(jù)類型

在 Go 編程語言中,數(shù)據(jù)類型用于聲明函數(shù)和變量。

數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時(shí)候需要用大數(shù)據(jù)的時(shí)候才需要申請(qǐng)大內(nèi)存,就可以充分利用內(nèi)存。

Go 語言按類別有以下幾種數(shù)據(jù)類型:

序號(hào)類型和描述
1布爾型
布爾型的值只可以是常量 true 或者 false。一個(gè)簡(jiǎn)單的例子:var b bool = true。
2數(shù)字類型
整型 int 和浮點(diǎn)型 float32、float64,Go 語言支持整型和浮點(diǎn)型數(shù)字,并且支持復(fù)數(shù),其中位的運(yùn)算采用補(bǔ)碼。
3字符串類型:
字符串就是一串固定長(zhǎng)度的字符連接起來的字符序列。Go 的字符串是由單個(gè)字節(jié)連接起來的。Go 語言的字符串的字節(jié)使用 UTF-8 編碼標(biāo)識(shí) Unicode 文本。
4派生類型:
包括:
  • (a) 指針類型(Pointer)

  • (b) 數(shù)組類型

  • (c) 結(jié)構(gòu)化類型(struct)

  • (d) Channel 類型

  • (e) 函數(shù)類型

  • (f) 切片類型

  • (g) 接口類型(interface)

  • (h) Map 類型

Go語言中有豐富的數(shù)據(jù)類型,除了基本的整型、浮點(diǎn)型、布爾型、字符串外,還有數(shù)組、切片、結(jié)構(gòu)體、函數(shù)、map、通道(channel)等

1.整形

  • 整數(shù)

1.1.整型分為兩類

  • 按占用的內(nèi)存長(zhǎng)度劃分

int8、int16、int32、int64
  • 按照是否有正負(fù)號(hào)劃分-無符號(hào)整型

uint8、uint16、uint32、uint64
  • 與 C 語言對(duì)比

uint8 對(duì)應(yīng) byte 型
int16 對(duì)應(yīng) C 語言中的 short 型
int64 對(duì)應(yīng) C 語言中的 long 型

1.2.整形描述

類型描述
int8有符號(hào) 8位整型 (-128 到 127)
int16有符號(hào) 16位整型 (-32768 到 32767)
int32有符號(hào) 32位整型 (-2147483648 到 2147483647)
int64有符號(hào) 64位整型 (-9223372036854775808 到 9223372036854775807)
uint8無符號(hào) 8位整型 (0 到 255)
uint16無符號(hào) 16位整型 (0 到 65535)
uint32無符號(hào) 32位整型 (0 到 4294967295)
uint64無符號(hào) 64位整型 (0 到 18446744073709551615)

1.3.特殊整型

類型描述
int32位操作系統(tǒng)上就是int32,64位操作系統(tǒng)上就是int64
uint32位操作系統(tǒng)上就是uint32,64位操作系統(tǒng)上就是uint64
uintptr無符號(hào)整型,用于存放一個(gè)指針

1.4.注意

1.在使用 int 和 uint 類型時(shí),不能假定它是 32 位或 64 位的整型,而是考慮 int 和 uint 可能在不同平臺(tái)上的差異
2.獲取對(duì)象的長(zhǎng)度的內(nèi)建 len() 函數(shù)返回的長(zhǎng)度可以根據(jù)不同平臺(tái)的字節(jié)長(zhǎng)度進(jìn)行變化
3.實(shí)際使用中,切片或 map 的元素?cái)?shù)量等都可以用 int 來表示
4.在涉及到二進(jìn)制傳輸,讀寫文件的結(jié)構(gòu)描述時(shí),為了保持文件的結(jié)構(gòu)不會(huì)受到不同編譯目標(biāo)平臺(tái)字節(jié)長(zhǎng)度的影響,不要使用 int 和 uint

1.5.數(shù)字字面量語法

  • Number literals syntax

  • Go1.13 版本之后引入了 數(shù)字字面量語法,這樣便于開發(fā)者以二進(jìn)制、八進(jìn)制或十六進(jìn)制浮點(diǎn)數(shù)的格式定義數(shù)字

  • 內(nèi)存地址是以十六進(jìn)制數(shù)進(jìn)行保存的

v := 0b00101101, 代表二進(jìn)制的 101101,相當(dāng)于十進(jìn)制的 45
v := 0o377,代表八進(jìn)制的 377,相當(dāng)于十進(jìn)制的 255
v := 0x1p-2,代表十六進(jìn)制的 1 除以 22,也就是 0.25
  • 允許用下劃線 _ 來分隔數(shù)字

v := 123_456 表示 v 的值等于 123456。
  • 可以借助 fmt 函數(shù)來將一個(gè)整數(shù)以不同進(jìn)制形式展示

package main

import "fmt"

func main() {
    // 定義十進(jìn)制數(shù)
    var a int = 10
    fmt.Printf("%d \n", a) // 占位符 %d 表示使用十進(jìn)制顯示為 10
    fmt.Printf("%b \n", a) // 占位符 %b 表示使用二進(jìn)制顯示為 1010

    // 定義八進(jìn)制數(shù),需要以 0 開頭
    var b int = 077
    fmt.Printf("%o \n", b) // 占位符 %o 表示使用八進(jìn)制顯示為 77

    // 定義十六進(jìn)制數(shù),需要以 0x 開頭
    var c int = 0xff
    fmt.Printf("%x \n", c) // 占位符 %x 表示使用十六進(jìn)制顯示為 ff,小寫字母顯示
    fmt.Printf("%X \n", c) // 占位符 %X 表示使用十六進(jìn)制顯示為 FF,大寫字母顯示
}

2.浮點(diǎn)型

  • Go 語言支持兩種浮點(diǎn)型數(shù):float32 和 float64 ,這兩種浮點(diǎn)型數(shù)據(jù)格式遵循 IEEE 754 標(biāo)準(zhǔn)

float32 的浮點(diǎn)數(shù)的最大范圍約為 3.4e38,可以使用常量定義:math.MaxFloat32
float64 的浮點(diǎn)數(shù)的最大范圍約為 1.8e308,可以使用一個(gè)常量定義:math.MaxFloat64
打印浮點(diǎn)數(shù)時(shí),可以使用 fmt 包配合 %f
  • 實(shí)例演示:

package main
import (
    "fmt"
    "math"
)
func main() {
    fmt.Printf("%f\n", math.Pi)
    fmt.Printf("%.2f\n", math.Pi)
}

3.復(fù)數(shù)

  • complex64 和 complex128

  • 復(fù)數(shù)有實(shí)部和虛部,complex64 的實(shí)部和虛部為 32 位,complex128 的實(shí)部和虛部為 64 位

var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)

4.布爾值

  • Go 語言中以 bool 類型進(jìn)行聲明布爾型數(shù)據(jù)

1.布爾型數(shù)據(jù)只有 true 和 false 兩個(gè)值,布爾類型變量的默認(rèn)值為 false。
2.Go 語言中不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型.
3.布爾型無法參與數(shù)值運(yùn)算,也無法與其他類型進(jìn)行轉(zhuǎn)換

5.字符串

  • Go 語言中的字符串以原生數(shù)據(jù)類型出現(xiàn),使用字符串就像使用其他原生數(shù)據(jù)類型(int、bool、float32、float64 等)一樣

  • Go 語言字符串使用 UTF-8 編碼,可以在 Go 語言的源碼中直接添加非 ASCII 碼字符

5.1.定義一個(gè)字符串類型的變量

  • 使用 雙引號(hào) 定義 單行字符串 變量

  • 使用 反引號(hào) 定義 多行字符串 變量

  • 使用 單引號(hào) 定義 單個(gè)字符 變量

  • 實(shí)例演示

package main

import "fmt"

func main() {
    // 使用 雙引號(hào) 定義 單行字符串 變量
    s1 := "hello" //定義英文字符串
    s2 := "你好"    // 可以識(shí)別非 ASCII 碼,默認(rèn)支持 utf-8 編碼

    // 使用 反引號(hào) 定義 多行字符串 變量
    s3 := `
11111
22222   // 多行字符串里的雙斜杠也表示注釋
33333
`

    // 使用 單引號(hào) 定義 單個(gè)字符 變量
    s4 := 'h'

    fmt.Println("\n單行字符串01", s1)
    fmt.Println("\n單行字符串02", s2)
    fmt.Println("\n多行字符串", s3)
    fmt.Println("\n字符定義", s4)
}

5.2.字符串轉(zhuǎn)義

  • Go 語言的字符串常見轉(zhuǎn)義符包含回車、換行、單雙引號(hào)、制表符等

轉(zhuǎn)義符含義
\r回車符 (返回行首)
\n換行符 (直接跳到下一行的同列位置)
\t制表符
'單引號(hào)
"雙引號(hào)
\反斜杠

5.3.字符串轉(zhuǎn)義-實(shí)例演示

package main

import (
    "fmt"
)

func main() {
    // 轉(zhuǎn)義符的使用
    fmt.Println("\n# 轉(zhuǎn)義符的使用 str := \"c:\\go\"")
}

5.4.字符串操作

方法方法說明
len(str)求長(zhǎng)度
+或fmt.Sprintf拼接字符串
strings.Split分割
strings.contains判斷是否包含
strings.HasPrefix,strings.HasSuffix前綴/后綴判斷
strings.Index(),strings.LastIndex()子串出現(xiàn)的位置
strings.Join(a[]string, sep string)join操作

5.5.字符串操作-實(shí)例演示

package main

import (
    "fmt"
    "strings"
)

// 字符串操作
func main() {
    // 字符串求長(zhǎng)度
    s3 := "zhongguojueqi"
    fmt.Println("\n字符串-求長(zhǎng)度: ", len(s3))
    
    // 字符串拼接
    s4 := "nihaoshijie"
    fmt.Println("\n字符串-拼接01: ", s3+s4)
    
    s5 := fmt.Sprintf("%s---%s", s3, s4)
    fmt.Println("\n字符串-拼接02: ", s5)
    
    // 字符串分割
    s6 := strings.Split(s3, "o")
    fmt.Println("\n字符串-分割: ", s6)
    
    // 字符串包含判斷
    s7 := strings.Contains(s3, "o")
    fmt.Println("\n字符串-包含判斷01: ", s7)
    fmt.Println("\n字符串-包含判斷02: ", strings.Contains(s3, "o"))
    
    // 字符串前綴, 后綴判斷
    fmt.Println("\n字符串-前綴判斷: ", strings.HasPrefix(s3, "zhong"))
    fmt.Println("\n字符串-后綴判斷: ", strings.HasSuffix(s3, "qi"))
    
    // 字符串索引查找
    fmt.Println("\n字符串-索引查找-第一個(gè)字符 o 的索引: ", strings.Index(s3, "o"))
    fmt.Println("\n字符串-索引查找-最后一個(gè)字符 o 的索引: ", strings.LastIndex(s3, "o"))
    
    // 字符串-join操作
    s8 := []string{"aaa", "bbb", "ccc", "ddd"}
    fmt.Println("\n字符串-join 操作: ", strings.Join(s8, " + "))
}

6.字符

6.1.定義一個(gè)字符變量

  • 組成字符串的元素叫做 字符,使用單引號(hào)進(jìn)行定義字符類型變量,字符串使用雙引號(hào)定義

  • 可以通過遍歷或者單個(gè)獲取字符串元素獲得字符

func runeDemo01() { // 字符定義
    a := '中'         // 默認(rèn)識(shí)別為 rune 類型的字符變量
    b := "中"         // 定義一個(gè)字符串
    var c byte = 'a' // 定義一個(gè)byte類型字符
    var d rune = 'a' // 定義一個(gè)rune類型字符
    fmt.Println(a, b)
    fmt.Printf("%v,%T\n", c, c)
    fmt.Printf("%v,%T\n", d, d)
}

6.2.字符類型有兩種

6.2.1.uint8-類型字符
  • go 語言中一般的英文數(shù)字字符使用 ASCII 碼的一個(gè)字符,占據(jù) 8 位 bit 的內(nèi)存空間,也就是常用的 byte 型

6.2.2.rune-類型字符
  • go 語言中處理中文日文或者其他復(fù)合字符時(shí),需要用到 rune 類型,rune 類型實(shí)際是一個(gè) int32,代表一個(gè) UTF-8 字符(Unicode編碼)

7.字符串拓展

7.1.字符串遍歷-方法1-使用循環(huán)依次取出字符串中的元素

// 字符串遍歷-traversalString
package main

import (
    "fmt"
)

func traversalString01() {
    s := "hello世界"
    for i := 0; i < len(s); i++ { // 中英文使用 for循環(huán)加 len() 方法遍歷循環(huán),但遇到中文會(huì)有亂碼
      fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    fmt.Println([]byte(s))
}
-----------------------
104(h) 101(e) 108(l) 108(l) 111(o) 228(?) 184(?) 150() 231(?) 149() 140()
-----------------------

7.2.字符串遍歷-方法2-rune-類型遍歷可以使用 for range 循環(huán)

package main

import (
    "fmt"
)

// 遍歷字符串 traversalString
func traversalString02() {
    s := "hello世界"
    fmt.Println()
    for _, r := range s { // 按照 rune 類型遍歷
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
    fmt.Println([]rune(s))

}
-----------------------
104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界)
-----------------------
  • 結(jié)果分析:

1.因?yàn)?nbsp;UTF8 編碼下一個(gè)中文漢字由 3~4 個(gè)字節(jié)組成,所以我們不能簡(jiǎn)單的按照字節(jié)去遍歷一個(gè)包含中文的字符串,否則就會(huì)出現(xiàn)上面輸出中第一行的結(jié)果
2.字符串底層是一個(gè) byte 數(shù)組,所以可以和 []byte 類型相互轉(zhuǎn)換
3.字符串是不能修改的 字符串是由 byte 字節(jié)組成,所以字符串的長(zhǎng)度是 byte 字節(jié)的長(zhǎng)度
4.rune 類型用來表示 utf8 字符,一個(gè) rune 字符由一個(gè)或多個(gè) byte 組成。

7.3.字符串修改

  • 字符串是固定值無法修改,如果要修改字符串,需要先將其轉(zhuǎn)換成 []rune 或 []byte,完成后再轉(zhuǎn)換為 string 類型。無論哪種轉(zhuǎn)換,都會(huì)重新分配內(nèi)存,并復(fù)制字節(jié)數(shù)組

func changeString() {
    s1 := "big"
    // 強(qiáng)制類型轉(zhuǎn)換
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白蘿卜"
    runeS2 := []rune(s2)
    runeS2[0] = '紅'
    fmt.Println(string(runeS2))
}

8.類型轉(zhuǎn)換

  • Go語言中只有強(qiáng)制類型轉(zhuǎn)換,沒有隱式類型轉(zhuǎn)換。該語法只能在兩個(gè)類型之間支持相互轉(zhuǎn)換的時(shí)候使用

8.1.類型轉(zhuǎn)換-語法

T(表達(dá)式)
  • 其中,T 表示要轉(zhuǎn)換的類型,表達(dá)式包括變量、復(fù)雜算子和函數(shù)返回值等

8.1.類型轉(zhuǎn)換-實(shí)例演示

func sqrtDemo() {
  var a, b = 3, 4
  var c int
  // math.Sqrt()接收的參數(shù)是float64類型,需要強(qiáng)制轉(zhuǎn)換
  c = int(math.Sqrt(float64(a*a + b*b)))
  fmt.Println(c)
}
  • 說明

計(jì)算直角三角形的斜邊長(zhǎng)時(shí)使用 math 包的 Sqrt() 函數(shù),該函數(shù)接收的是 float64 類型的參數(shù)
而變量 a 和 b 都是 int 類型的,這個(gè)時(shí)候就需要將 a 和 b 強(qiáng)制類型轉(zhuǎn)換為 float64 類型

關(guān)于go語言的10種數(shù)據(jù)類型介紹就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:go語言的10種數(shù)據(jù)類型介紹
標(biāo)題鏈接:http://muchs.cn/article2/gppsoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、電子商務(wù)營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站制作、定制開發(fā)、網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)