成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

首先來看看它的底層結構:

type stringStruct struct {
    str unsafe.Pointer
    len int
}

和切片的結構很像,只不過少了一個表示容量的 cap 字段。

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

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

s := "Hello World"

那么它在內存中存儲是這樣的:

圖片

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

s := "Hello World"

s = "Hello AlwaysBeta"

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

圖片

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

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

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

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

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

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

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

這樣就可以了。

責任編輯:武曉燕 來源: AlwaysBeta
相關推薦

2015-03-19 15:04:06

2023-01-03 08:07:33

Go字符串指針

2015-10-12 08:56:27

Java不可變

2011-10-27 13:37:51

網頁設計

2023-03-28 07:26:37

2023-05-04 07:44:13

編程界小語言Java

2023-03-21 15:27:00

RedisC語言字符串

2022-05-20 11:41:00

數據科學編程語言Python

2018-03-07 15:50:10

物聯網語言信息技術

2023-12-11 07:33:05

Go語言字符技巧

2020-04-07 16:12:56

Go編程語言開發

2024-05-30 12:17:25

2020-11-02 17:21:07

云計算

2021-05-19 16:21:16

比特幣加密貨幣貨幣

2013-02-25 09:46:22

2022-03-14 08:33:09

TypeScriptJavaScript前端

2020-07-03 14:05:26

Serverless云服務商

2021-11-29 18:27:12

Web Wasmjs

2021-11-26 22:14:55

PHP編程語言開發

2022-11-10 07:43:45

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久国产一区二区三区 | 国产成人综合在线 | 欧美日韩在线一区二区三区 | 草久久久 | 一区视频在线免费观看 | 日本黄色高清视频 | 成人在线免费电影 | 欧美成人一区二区三区 | 草久久 | 一区二区三区免费在线观看 | 欧美一二三区 | 成人在线观看免费 | 中文字幕动漫成人 | 久久久爽爽爽美女图片 | 久久综合国产精品 | 看片国产 | 国产精品久久久久久久久久久久冷 | 久久精品—区二区三区 | 91超碰在线观看 | 国产一区二区三区免费观看视频 | 一级看片免费视频囗交动图 | 羞羞色在线观看 | 仙人掌旅馆在线观看 | 亚洲欧美国产精品一区二区 | 久草网站 | 午夜小视频在线播放 | 男女视频在线观看网站 | 就操在线| av网站在线播放 | 久久久婷| 欧美综合一区 | 欧洲一区二区三区 | 久久久精选 | 中文字幕精品视频 | 国产视频第一页 | 久久久久久91 | 国产精品女人久久久 | 成人免费在线观看 | 一区二区三区四区不卡视频 | 国产精品一区二区在线 | 成人免费看片网 |