<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      為什么說 Go 語言字符串是不可變的?

      原文鏈接: 為什么說 Go 語言字符串是不可變的?

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

      這個問題本身并不困難,但對于新手來說確實容易產(chǎn)生困惑,今天就來回答一下。

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

      type stringStruct struct {
          str unsafe.Pointer
          len int
      }
      

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

      • str:指向一個 []byte 類型的指針
      • len:字符串的長度

      所以,當我們定義一個字符串:

      s := "Hello World"
      

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

      當我們在程序中對字符串進行重新賦值時,比如這樣:

      s := "Hello World"
      
      s = "Hello AlwaysBeta"
      

      底層的存儲就變成了這樣:

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

      更直接一點,我們直接修改字符串中的單個字符,比如:

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

      這樣做的話,會直接報錯:

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

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

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

      這樣就可以了。

      以上就是本文的全部內(nèi)容,如果覺得還不錯的話歡迎點贊轉(zhuǎn)發(fā)關注,感謝支持。


      推薦閱讀:

      posted @ 2023-06-02 19:40  yongxinz  閱讀(127)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 青青草国产精品日韩欧美| 日韩人妻无码一区二区三区综合部| 国产高跟黑色丝袜在线| 香蕉EEWW99国产精选免费| 亚洲精品成人片在线观看精品字幕| 平潭县| 国产稚嫩高中生呻吟激情在线视频| 乱人伦人妻中文字幕无码久久网| 大胸美女吃奶爽死视频| 国内少妇人妻丰满av| 四虎永久在线高清免费看| 国产av无码专区亚洲av软件| 成人三级视频在线观看不卡| 亚洲熟妇自偷自拍另欧美| 日韩精品一区二区三区激| 国产欧美日韩另类精彩视频| 国产欧美综合在线观看第十页| 国产男女猛烈无遮挡免费视频| 永久免费av无码网站直播| 亚洲熟妇自偷自拍另类| 一本精品99久久精品77| 一本色道久久加勒比综合 | 在线看国产精品自拍内射| 国产一二三区在线| 中宁县| 内射老妇bbwx0c0ck| 99久久激情国产精品| 性一交一乱一乱一视频| 亚洲色欲色欲WWW在线丝| 荔波县| 亚洲粉嫩av一区二区黑人| AV区无码字幕中文色| 亚洲蜜臀av乱码久久| 国产精品国产高清国产av| 中文字幕精品亚洲二区| 日韩av一区二区高清不卡| 日本一卡2卡3卡4卡无卡免费| 亚洲国产精品一二三四五| 国产在线高清视频无码| 精品国产亚洲一区二区三区| 新宁县|