最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang字符串類型原理及其使用方法

 更新時(shí)間:2023年09月14日 10:06:01   作者:SWUST_Vector  
本文主要介紹了Golang字符串類型原理及其使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Go字符串是不可變的字節(jié)序列,按照 UTF-8 編碼的 Unicode 碼點(diǎn)。字符串的內(nèi)部序列不可改變,這樣設(shè)計(jì)主要是為了減少內(nèi)存開支,字符串及其子串都可以使用相同的底層內(nèi)存。

ASCII碼、Unicode字符、UFT-8編碼

ASCII碼: 使用7位表示128個(gè)字符串(大小寫英文字母、數(shù)字、各種標(biāo)點(diǎn)及設(shè)備控制符)。
Unicode字符: 基本包括了世界上所有的文本字符,使用int32位的數(shù)據(jù)類型保存單個(gè)字符。Go中rune 數(shù)據(jù)類型就對應(yīng)該類型。
UTF-8編碼: 以字節(jié)為單位對Unicode碼點(diǎn)做變長編碼,兼容ASCII碼,相當(dāng)于是將不同字節(jié)大小的字符類型組裝到一起,使編碼更加緊湊。但是UTF-8編碼的字符串不能按下表直接訪問某一個(gè)字符,需要使用特殊的方式進(jìn)行處理。

字符串?dāng)?shù)據(jù)類型的基本操作

1.字符串長度

len函數(shù): len(str) 該函數(shù)能獲取字符串所占的字節(jié)數(shù),如果字符串是字母或者數(shù)字可以表示該字符串的字符個(gè)數(shù),如果包含漢字等特殊字符則無法表示字符個(gè)數(shù)。此時(shí)需要使用utf8.RuneCountInString(str)函數(shù)

package main
import (
	"fmt"
	"unicode/utf8"
)
func main() {
	str1 := "abcd"
	str2 := "abc坎"
	fmt.Printf("len(str1) -> %d\n", len(str1))
	fmt.Printf("len(str2) -> %d\n", len(str2))
	fmt.Printf("字符數(shù)(str1) -> %d\n", utf8.RuneCountInString(str1))
	fmt.Printf("字符數(shù)(str2) -> %d\n", utf8.RuneCountInString(str2))
}
// 輸出
// len(str1) -> 4
// len(str2) -> 6
// 字符數(shù)(str1) -> 4
// 字符數(shù)(str2) -> 4

2.字符串前綴后綴及子字符串問題

基于utf8的優(yōu)勢,許多字符串的操作無需解碼,可以直接判斷某個(gè)字符串是否為前綴、后綴或者子字符串(判斷時(shí)采用逐字節(jié)比較的方法)

package main
import (
	"fmt"
	"strings"
)
func main() {
str := "abcd"
	s := "abcd"
	//前綴
	if len(s) <= len(str) && str[:len(s)] == s {
		fmt.Println("Is PreFix!")
	}
	//后綴
	if len(s) <= len(str) && str[len(str)-len(s):] == s {
		fmt.Println("Is SufFix!")
	}
	//子字符串
	if strings.Contains(str, s) {
		fmt.Println("Is Contanins!")
	}
}
// 輸出
// Is PreFix!
// Is SufFix!
// Is Contanins!

3.字符串的遍歷

range: 該方法遍歷的是字符串的字符個(gè)數(shù)

package main
import (
	"fmt"
)
func main() {
	str := "abcd愛蓮說"
	for i, v := range str {
		fmt.Printf("str[%d] is %c\n", i, v)
	}
}
// 輸出
// str[0] is a
// str[1] is b
// str[2] is c
// str[3] is d
// str[4] is 愛
// str[7] is 蓮
// str[10] is 說

4.字符串和字節(jié)slice的相互轉(zhuǎn)換

利用 [ ]byte 數(shù)據(jù)類型實(shí)現(xiàn)對字符串的操作,使用[]byte先對字符進(jìn)行編輯然后再將其轉(zhuǎn)換成字符串類型。

//不可編輯
s := "abcdef"
//可編輯
b := []byte(s)
str = string(b)

byte.Buffer工具: 該工具作為可以不斷寫入新的字符等byte數(shù)據(jù)

func AddByte(str string) string {
	var buf bytes.Buffer
	for _, v := range str {
		//添加原字符
		buf.WriteRune(v)
		//插入空格
		buf.WriteString(" ")
	}
	return buf.String()
}

到此這篇關(guān)于Golang字符串類型原理及其使用方法的文章就介紹到這了,更多相關(guān)Golang字符串類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang交叉編譯(跨平臺(tái)編譯)的使用

    Golang交叉編譯(跨平臺(tái)編譯)的使用

    本文主要介紹了Golang交叉編譯(跨平臺(tái)編譯)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言中new()函數(shù)的相關(guān)知識(shí)以及具體用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-05-05
  • golang1.23版本之前 Timer Reset方法無法正確使用

    golang1.23版本之前 Timer Reset方法無法正確使用

    在Go 1.23之前,使用`time.Reset`函數(shù)時(shí)需要先調(diào)用`Stop`并明確從timer的channel中抽取出東西,以避免潛在的問題,然而,這在實(shí)際代碼中難以實(shí)現(xiàn),因?yàn)樵O(shè)置定時(shí)器狀態(tài)和發(fā)送channel的操作并不是原子的,在某些情況下,這會(huì)導(dǎo)致timer在不應(yīng)該觸發(fā)時(shí)提前觸發(fā)
    2025-01-01
  • Go處理包含多種引號(hào)的字符串的幾種方法

    Go處理包含多種引號(hào)的字符串的幾種方法

    在Go中,有幾種方式可以處理包含多種引號(hào)的字符串,以確保代碼的可讀性和正確性,本文將給大家詳細(xì)介紹了這幾種處理方式,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Go工具鏈之go tool cover使用方法和示例詳解

    Go工具鏈之go tool cover使用方法和示例詳解

    go tool cover是Go工具鏈中的一個(gè)命令,作用是分析測試用例的代碼覆蓋率,本文將對go tool cover 作用,使用方法和使用場景作一個(gè)簡單的介紹,感興趣的同學(xué)可以參考閱讀一下
    2023-07-07
  • 如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng)

    如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng)

    這篇文章主要介紹了如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Go語言中的HTTP客戶端從標(biāo)準(zhǔn)庫到第三方庫

    Go語言中的HTTP客戶端從標(biāo)準(zhǔn)庫到第三方庫

    本文介紹了Go語言中的HTTP客戶端開發(fā),涵蓋標(biāo)準(zhǔn)庫和第三方庫使用、最佳實(shí)踐、高級(jí)功能、HTTP/2支持、安全考慮、性能優(yōu)化等內(nèi)容,通過本文,讀者可以構(gòu)建高效、可靠的HTTP客戶端應(yīng)用
    2026-05-05
  • Go語言滑動(dòng)窗口最大值的實(shí)現(xiàn)示例

    Go語言滑動(dòng)窗口最大值的實(shí)現(xiàn)示例

    本文主要介紹了Go語言滑動(dòng)窗口最大值的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Golang語言中切片的長度和容量的概念和使用

    Golang語言中切片的長度和容量的概念和使用

    這篇文章主要介紹了Golang語言中切片的長度和容量的概念和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • go語言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    go語言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    這篇文章主要為大家介紹了go語言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評論

贵溪市| 长宁区| 江口县| 车致| 萨嘎县| 满城县| 清镇市| 左云县| 咸丰县| 罗城| 霍山县| 九寨沟县| 泉州市| 南川市| 张家川| 乌拉特中旗| 长岛县| 石渠县| 西和县| 宁晋县| 阿城市| 利津县| 瑞金市| 涞水县| 海晏县| 宁强县| 聂拉木县| 三都| 武清区| 邢台市| 施秉县| 聂荣县| 清镇市| 喀喇沁旗| 锡林郭勒盟| 江门市| 永兴县| 莱芜市| 眉山市| 乐安县| 松桃|