欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單聊聊為什么說(shuō)Go語(yǔ)言字符串是不可變的

 更新時(shí)間:2023年05月29日 15:22:01   作者:yongxinz  
最近有讀者留言說(shuō),平時(shí)在寫代碼的過程中,是會(huì)對(duì)字符串進(jìn)行修改的,但網(wǎng)上都說(shuō) Go 語(yǔ)言字符串是不可變的,這是為什么呢,本文就來(lái)和大家簡(jiǎn)單講講

最近有讀者留言說(shuō),平時(shí)在寫代碼的過程中,是會(huì)對(duì)字符串進(jìn)行修改的,但網(wǎng)上都說(shuō) Go 語(yǔ)言字符串是不可變的,這是為什么呢?

這個(gè)問題本身并不困難,但對(duì)于新手來(lái)說(shuō)確實(shí)容易產(chǎn)生困惑,今天就來(lái)回答一下。

首先來(lái)看看它的底層結(jié)構(gòu):

type?stringStruct?struct?{
????str?unsafe.Pointer
????len?int
}

和切片的結(jié)構(gòu)很像,只不過少了一個(gè)表示容量的 cap 字段。

  • str:指向一個(gè) []byte 類型的指針
  • len:字符串的長(zhǎng)度

所以,當(dāng)我們定義一個(gè)字符串:

s?:=?"Hello?World"

那么它在內(nèi)存中存儲(chǔ)是這樣的:

當(dāng)我們?cè)诔绦蛑袑?duì)字符串進(jìn)行重新賦值時(shí),比如這樣:

s?:=?"Hello?World"

s?=?"Hello?AlwaysBeta"

底層的存儲(chǔ)就變成了這樣:

Go 實(shí)際上是重新創(chuàng)建了一個(gè) []byte{} 切片,然后讓指針指向了新的地址。

更直接一點(diǎn),我們直接修改字符串中的單個(gè)字符,比如:

s?:=?"Hello?World"
s[0]?=?'h'

這樣做的話,會(huì)直接報(bào)錯(cuò):

cannot?assign?to?s[0]?(strings?are?immutable)

如果一定要這么做的話,需要對(duì)字符串進(jìn)行一個(gè)轉(zhuǎn)換,轉(zhuǎn)換成 []byte 類型,修改之后再轉(zhuǎn)換回 string 類型:

s?:=?"Hello?World"
sBytes?:=?[]byte(s)
sBytes[0]?=?'h'
s?=?string(sBytes)

這樣就可以了。

到此這篇關(guān)于簡(jiǎn)單聊聊為什么說(shuō)Go語(yǔ)言字符串是不可變的的文章就介紹到這了,更多相關(guān)Go語(yǔ)言字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang使用Token來(lái)驗(yàn)證

    Golang使用Token來(lái)驗(yàn)證

    token指的是一種用于驗(yàn)證用戶身份或授權(quán)訪問的憑證,本文主要介紹了Golang使用Token來(lái)驗(yàn)證,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • 深入了解Golang中的Slice底層實(shí)現(xiàn)

    深入了解Golang中的Slice底層實(shí)現(xiàn)

    本文主要為大家詳細(xì)介紹了Golang中slice的底層實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-02-02
  • 詳解Golang編程中的常量與變量

    詳解Golang編程中的常量與變量

    這篇文章主要介紹了詳解Golang編程中的常量與變量,是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Golang之casbin權(quán)限管理的實(shí)現(xiàn)

    Golang之casbin權(quán)限管理的實(shí)現(xiàn)

    這篇文章主要介紹了Golang之casbin權(quán)限管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Go語(yǔ)言函數(shù)學(xué)習(xí)教程

    Go語(yǔ)言函數(shù)學(xué)習(xí)教程

    這篇文章主要介紹了Go語(yǔ)言函數(shù)基本用法,結(jié)合實(shí)例形式分析了Go語(yǔ)言函數(shù)的格式、定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • go流程控制代碼詳解

    go流程控制代碼詳解

    這篇文章主要介紹了go流程控制,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • GO語(yǔ)言實(shí)現(xiàn)文件上傳的示例代碼

    GO語(yǔ)言實(shí)現(xiàn)文件上傳的示例代碼

    這篇文章主要分享一下golang實(shí)現(xiàn)文件上傳的流程和具體代碼,供大家參考,感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-08-08
  • 詳解Go語(yǔ)言單元測(cè)試中如何解決MySQL存儲(chǔ)依賴問題

    詳解Go語(yǔ)言單元測(cè)試中如何解決MySQL存儲(chǔ)依賴問題

    MySQL?存儲(chǔ)就是一個(gè)非常常見的外部依賴,這篇文章主要來(lái)和大家一起探討在?Go?語(yǔ)言中編寫單元測(cè)試時(shí),如何解決?MySQL?存儲(chǔ)依賴,需要的可以參考一下
    2023-07-07
  • go語(yǔ)言異常panic和恢復(fù)recover用法實(shí)例

    go語(yǔ)言異常panic和恢復(fù)recover用法實(shí)例

    這篇文章主要介紹了go語(yǔ)言異常panic和恢復(fù)recover用法,實(shí)例分析了異常panic和恢復(fù)recover使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例

    GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例

    這篇文章主要為大家介紹了GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評(píng)論