首頁  >  文章  >  後端開發  >  一篇文章帶你了解Go語言基礎之位元組類型

一篇文章帶你了解Go語言基礎之位元組類型

Go语言进阶学习
Go语言进阶学习轉載
2023-07-20 14:40:241623瀏覽
這次咱們繼續學習Go基礎之位元組類型吧。

上文之字串回顧

在上述文章中,我們學過了字串型別。

在Go語言中,字串型別是基本型別,在堆疊中存儲,其結構如下。

一篇文章帶你了解Go語言基礎之位元組類型

可以看到,在Go中,字串其實就是指向了一個連續的記憶體位址,並且記錄了長度,讀取是一次讀取出來的。

那麼,如上圖所示,記憶體裡面存的一個個#叫啥呢? ? ?


byte與rune型別

字串是#一個字元##拼接成的,反過來,也是一個個字符拼接成的字串,而一個個的字符,而稱為位元組(byte)。

位元組佔用1個位元組大小,只能存字母了,標點符號之類的,不能存中文。

當然,存中文怎麼辦???在Go中有一個#rune,和 byte類似,本質和byte一樣,只不過rune一個佔用4個位元組。

rune使用utf-8編碼,可以存中文,各種語言。

所以,處理中文盡量用rune#類型。


定義個(位元組)byte類型變數

字元用單引號'號包裹起來。

程式碼

package main

import "fmt"

func main() {
    var a byte = 'a'
    fmt.Println(a)
}

#小朋友,是否有很多疑問???為什麼是97

一篇文章帶你了解Go語言基礎之位元組類型

原因

byte代表的是一个ASCII码的一个字符,同理,rune可以理解为是byte的一个超集,向下兼容byte

package main

import "fmt"

func main() {
    var a rune = 'a'
    fmt.Println(a)
}

结果:

一篇文章帶你了解Go語言基礎之位元組類型

但是rune里面可以写中文,byte不行。

byte不能存中文

一篇文章帶你了解Go語言基礎之位元組類型

rune可以存中文

一篇文章帶你了解Go語言基礎之位元組類型

发现了吗,打印的竟然是一个数字?这是为啥???

就拿字母a来说,其实打印的是ASCII对应的数字,打印的是他的十进制。

同理,字符也是,这里就不做例子了,因为utf-8表太大了。

一篇文章帶你了解Go語言基礎之位元組類型

遍历字符串

方式一

package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for _, r := range s {
        fmt.Printf("%c \n",r)
}
}

一篇文章帶你了解Go語言基礎之位元組類型

方式二

package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for i := 0; i < len(s); i++ {
        //中文会乱码,不推荐
        fmt.Printf("%c \n",s[i])
}
}

一篇文章帶你了解Go語言基礎之位元組類型

修改字符串

同理,字符串相当于是字节列表组成的,是不能直接修改的,想要直接修改需要打散成字节列表才行。

package main

import "fmt"

func main() {
    //只有英文的情况下
    s1 := "hello world"
    var s1_byte_list = []byte(s1) //打散成字符列表
    s1_byte_list[6] = &#39;F&#39;         //修改下表为6的字符为F
    s1 = string(s1_byte_list)     //打散的字符列表在组装成字符串
    fmt.Println(s1)               //输出 hello 6orld

    //带有中文的情况
    s2 := "天空好像下雨,我好像住你隔壁vay"
    var s2_rune_list = []rune(s2) //打散成utf-8字符列表
    s2_rune_list[5] = &#39;雪&#39;         //修改下表为5的字符为雪
    s2 = string(s2_rune_list)     //打散的utf8字符转字符串
    fmt.Println(s2)               //输出 天空好像下雪,我好像住你隔壁
}

以上是一篇文章帶你了解Go語言基礎之位元組類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Go语言进阶学习。如有侵權,請聯絡admin@php.cn刪除