Like Share Discussion Bookmark Smile

J.J. Huang   2025-02-03   Getting Started Golang 01.基本型別   瀏覽次數:次   DMCA.com Protection Status

Go | 初步了解「字串」型別

💬 簡介

字串型別是最常用的資料型別之一,廣泛應用於處理文本資料。字串是由一系列 Unicode 字元組成的,並且是不可變的,這意味著一旦字串被創建,它的內容不能更改。

本篇文章將介紹字串型別,並深入探討它們的特性、常見操作及使用場景。

圖片來源:Gophers(地鼠造型的原創者為 Renee French)


🔎 Go 語言中的字串型別

1️⃣ 字串的基本概念

字串型別由一系列的 Unicode 字元組成,每個字串都是不可變的(immutable)。這表示字串的內容無法在創建後進行修改。如果需要修改字串,必須創建一個新的字串。

  • 範例:簡單字串示範

    1
    2
    3
    4
    5
    6
    7
    8
    package main

    import "fmt"

    func main() {
    var str string = "Hello, Go!"
    fmt.Println(str) // 輸出:Hello, Go!
    }

    📝在這個範例中,str 是一個簡單的字串,包含了 “Hello, Go!”。這個字串是不可變的。

  • 範例:簡單字串不可變示範

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package main

    import "fmt"

    func main() {
    var str string = "Hello, Go!"

    // 嘗試修改字串會產生錯誤,因為字串是不可變的
    // str[0] = 'h' // 編譯錯誤:cannot assign to str[0]

    fmt.Println(str) // 輸出:Hello, Go!
    }

    📝 字串不可變的意思:在 Go 中,字串是不可變的(immutable)。這意味著一旦字串被創建後,它的內容就無法直接修改。如果嘗試去更改字串中的某個字符(如 str[0] = ‘h’),編譯器會報錯。這是因為字串本身是不可變的資料結構,任何對字串的修改都會創建一個新的字串,而不是直接修改原始字串的內容。

2️⃣ 字串的操作

字串提供了多種操作方法,常見的有字串的長度、拼接、子字串等。

  • 範例:字串長度與拼接
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package main

    import "fmt"

    func main() {
    var str1 string = "Hello"
    var str2 string = "Go"

    // 計算字串長度
    fmt.Println("字串長度:", len(str1)) // 輸出:5

    // 字串拼接
    var result string = str1 + ", " + str2 + "!"
    fmt.Println(result) // 輸出:Hello, Go!
    }

    📝在這個範例中,我們使用 len() 函式來計算字串的長度,並使用 + 來進行字串的拼接。

3️⃣ 字串與字元

字串是由字元組成的,每個字元是由一個或多個位元組(byte)組成。可以處理多語言文本資料。

-範例:遍歷字串中的字元

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"

func main() {
str := "Hello, Go!"

for i, ch := range str {
fmt.Printf("字元 %d: %c\n", i, ch)
}

/* 輸出:
字元 0: H
字元 1: e
字元 2: l
字元 3: l
字元 4: o
字元 5: ,
字元 6:
字元 7: G
字元 8: o
字元 9: !
*/
}

📝在這個範例中,range 用來遍歷字串中的每一個 Unicode 字元,並顯示其位置和內容。

4️⃣ 字串切片

字串是不可變的,但可以創建一個字串的切片來操作字串的一部分。這個切片不會改變原始字串的內容,而是返回一個新的字串。

  • 範例:字串切片
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package main

    import "fmt"

    func main() {
    str := "Hello, Go!"
    subStr := str[7:9] // 提取子字串
    fmt.Println(subStr) // 輸出:Go
    }

    📝在這個範例中,str[7:9] 是一個字串切片,提取了從第 7 到第 9 個字元之間的內容(不包括第 9 個字元)。


⚠️ 注意事項

1️⃣ 字串是不可變的

字串型別的不可變性意味著它的內容無法修改。如果需要改動字串,必須重新創建一個新的字串。這在進行大量字串操作時可能會對性能產生影響。

2️⃣ 使用字串切片要小心

儘管字串切片是一個方便的操作,但需要注意的是,字串切片仍然會保持對原始字串的引用。因此,在某些情況下,這可能會導致意外的行為。建議在不需要修改原始字串的情況下使用切片。


🛠 常見字串操作方法

標準庫中的 strings 套件提供了許多字串處理函式,以下是幾個常用的操作:

  • strings.Contains(str, substr string) bool檢查字串是否包含子字串。
  • strings.ToUpper(str string) string將字串轉換為大寫。
  • strings.ToLower(str string) string將字串轉換為小寫。
  • strings.Split(str, sep string) []string根據分隔符切割字串。
  • 範例:使用 strings 套件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import (
"fmt"
"strings"
)

func main() {
str := "Hello, Go!"

// 檢查是否包含子字串
fmt.Println(strings.Contains(str, "Go")) // 輸出:true

// 字串轉換為大寫
fmt.Println(strings.ToUpper(str)) // 輸出:HELLO, GO!

// 字串轉換為小寫
fmt.Println(strings.ToLower(str)) // 輸出:hello, go!

// 字串切割
fmt.Println(strings.Split(str, ", ")) // 輸出:[Hello Go!]
}

📝在這個範例中,我們使用 strings 套件來檢查字串是否包含某個子字串、將字串轉換為大寫或小寫,並切割字串。


🎯總結

字串型別提供了多樣化的操作方法,從拼接、切割到大小寫轉換,能夠應對各種文本處理需求。理解字串的基本操作與注意事項,將幫助在開發過程中更加高效地處理文本資料。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go