Go語言修改字符串


Go 語言的字符串無法直接修改每一個字符元素,只能通過重新構造新的字符串並賦值給原來的字符串變量實現。請參考下面的代碼:

    angel := "Heros never die"
    angleBytes := []byte(angel)
    for i := 5; i <= 10; i++ {
        angleBytes[i] = ' '
    }
    fmt.Println(string(angleBytes))

 

程序輸出如下:
Heros       die

代碼說明如下:

  • 在第 3 行中,將字符串轉為字符串數組。
  • 第 5~7 行利用循環,將 never 單詞替換為空格。
  • 最后打印結果。


感覺我們通過代碼達成了修改字符串的過程,但真實的情況是:Go 語言中的字符串和其他高級語言(JavaC#)一樣,默認是不可變的(immutable)。

字符串不可變有很多好處,如天生線程安全,大家使用的都是只讀對象,無須加鎖;再者,方便內存共享,而不必使用寫時復制(Copy On Write)等技術;字符串 hash 值也只需要制作一份。

所以說,代碼中實際修改的是 []byte,[]byte 在 Go 語言中是可變的,本身就是一個切片。

在完成了對 []byte 操作后,在第 9 行,使用 string() 將 []byte 轉為字符串時,重新創造了一個新的字符串。

總結

    • Go 語言的字符串是不可變的。
    • 修改字符串時,可以將字符串轉換為 []byte 進行修改。
    • []byte 和 string 可以通過強制類型轉換互轉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM