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

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使用minio替代文件系統(tǒng)的實(shí)戰(zhàn)教程

    Golang使用minio替代文件系統(tǒng)的實(shí)戰(zhàn)教程

    本文討論項(xiàng)目開發(fā)中直接文件系統(tǒng)的限制或不足,接著介紹Minio對象存儲(chǔ)的優(yōu)勢,同時(shí)給出Golang的實(shí)際示例代碼,包括初始化客戶端、讀取minio對象以及設(shè)置過期策略等,需要的朋友可以參考下
    2025-01-01
  • 詳解如何在Golang中監(jiān)聽多個(gè)channel

    詳解如何在Golang中監(jiān)聽多個(gè)channel

    這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)監(jiān)聽多個(gè)channel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • GORM中Model和Table的區(qū)別及使用

    GORM中Model和Table的區(qū)別及使用

    Model?和Table是兩種與數(shù)據(jù)庫表交互的核心方法,但它們的用途和行為存在著差異,本文主要介紹了GORM中Model和Table的區(qū)別及使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • golang游戲等資源壓縮包創(chuàng)建和操作方法

    golang游戲等資源壓縮包創(chuàng)建和操作方法

    這篇文章主要介紹了golang游戲等資源壓縮包創(chuàng)建和操作,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 四種Golang實(shí)現(xiàn)middleware框架的方式小結(jié)

    四種Golang實(shí)現(xiàn)middleware框架的方式小結(jié)

    middleware是一般框架里面常用的形式,比如web框架、rpc框架等,本文為大家詳細(xì)介紹了四種實(shí)現(xiàn)middleawre的方式,感興趣的可以了解一下
    2024-03-03
  • Go并發(fā)編程之goroutine使用正確方法

    Go并發(fā)編程之goroutine使用正確方法

    并發(fā)編程有一種常見方式就是許多工作子協(xié)程都是獨(dú)立的,互不干擾,但他們又是“同一時(shí)間”處理。本文重大給大家介紹Go并發(fā)編程goroutine使用方法,一起看看吧
    2021-09-09
  • 使用Go語言編寫一個(gè)簡單的Web框架

    使用Go語言編寫一個(gè)簡單的Web框架

    Go語言(又稱Golang)因其高效的性能和簡潔的語法,在編寫Web框架方面表現(xiàn)出色,下面將詳細(xì)介紹如何使用Go語言編寫一個(gè)簡單的Web框架,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-05-05
  • Go json omitempty如何實(shí)現(xiàn)可選屬性

    Go json omitempty如何實(shí)現(xiàn)可選屬性

    在Go語言中,使用`omitempty`可以幫助我們在進(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過將字段類型改為指針類型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來實(shí)現(xiàn)這一功能,例如,將float32修改為*float32
    2024-09-09
  • Golang中的錯(cuò)誤處理的示例詳解

    Golang中的錯(cuò)誤處理的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中的錯(cuò)誤處理的相關(guān)資料,文章中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Golang有一定幫助,需要的可以參考一下
    2022-12-12
  • 在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法

    在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法

    這篇文章主要介紹了在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法,需要的朋友可以參考下
    2014-10-10

最新評論