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

GO語言字符串常用操作小結(jié)

 更新時(shí)間:2023年02月09日 09:39:32   作者:該啟程了  
本文主要介紹了GO語言字符串常用操作小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

字符串簡(jiǎn)介

字符串是一段固定長度字符連接起來的字符序列,GO語言中的字符串是由單個(gè)字節(jié)連起來的,其字符串字節(jié)是由 UTF-8 編碼來表示unicode 文本的。

由于該編碼占用字節(jié)長度的不確定性,所以在GO語言中,字符串會(huì)根據(jù)需要占用 1~4 個(gè)字節(jié),這于其他編程語言不同(比如 c++ python java)比如說Java字符串始終占用2個(gè)字節(jié)。GO這樣做不僅減少了內(nèi)存和硬盤的占用,也不需要其他語言那樣對(duì) UTF-8 進(jìn)行編解碼。

GO中字符串和Java中字符串一樣,其值是不可變的(創(chuàng)建之后要修改,只會(huì)將指針指向新的字符串),當(dāng)代碼中存在字符串,編譯器會(huì)將其標(biāo)記成只讀數(shù)據(jù) SRODATA

常用方法

中文字符串截取

在GO中我們可以直接通過切片來截取字符串,但是當(dāng)截取的字符串是中文的時(shí)候就要注意了,在GO中,英文是占用一個(gè)字節(jié)的,中文占用的的是3個(gè)字節(jié),當(dāng)我們直接用切片截取的時(shí)候,可能會(huì)將中文的編碼截成兩半,結(jié)果就是最后那個(gè)字是一個(gè)亂碼。

這里比較推薦使用 rune 數(shù)組來截取字符串,截取后再轉(zhuǎn)為字符串。通過 rune 截取的不是字節(jié)了,該數(shù)組每一條都存儲(chǔ)這一個(gè)字(英文字母,中文漢字)

示例如下:示例

package main

import (
?? ?"fmt"
?? ?"unicode/utf8"
)

func main() {
?? ?// 聲明一個(gè)字符串
?? ?str := "這是一串字符串,測(cè)試 go 的方法"

?? ?// 字符串長度
?? ?fmt.Println(utf8.RuneCountInString(str))
?? ?// 字節(jié)長度
?? ?fmt.Println(len(str))

?? ?// 這個(gè)截取是按字節(jié)來截取的
?? ?str1 := str[0:9]
?? ?fmt.Println(str1)
?? ?// 一個(gè)中文占用3個(gè)字節(jié),當(dāng)截取10個(gè)字節(jié)時(shí)候,最后一個(gè)漢字就會(huì)發(fā)生亂碼
?? ?str2 := str[0:10]
?? ?fmt.Println(str2)

?? ?// 將字符串轉(zhuǎn)為 rune 數(shù)組,然后截取再轉(zhuǎn)回字符串
?? ?strRune := []rune(str)
?? ?fmt.Println(len(strRune))
?? ?// 注意了這里不是字節(jié)了,而是4個(gè)字
?? ?fmt.Println(string(strRune[0:4]))
}

//輸出
//17
//43
//這是一
//這是一?
//17
//這是一串

反轉(zhuǎn)字符串

這里還是用到了上面用的 rune 數(shù)組,先轉(zhuǎn)為 rune 數(shù)組類型,反轉(zhuǎn)后,再轉(zhuǎn)回字符即可。示例

package main

import "fmt"

func main() {
?? ?a := "123345asdfg"

?? ?reverseStr := reverseString(a)
?? ?fmt.Println(reverseStr)
}

func reverseString(a string) string {
?? ?b := []rune(a)

?? ?for i := 0; i < len(b)/2; i++ {
?? ??? ?// 注意:不可以像下面這樣寫哦
?? ??? ?//b[i] = b[len(b)-i-1]
?? ??? ?//b[len(b)-i-1] = b[i]

?? ??? ?// 可以理解為將兩個(gè)都先取出來再同時(shí)賦值,不得不說還是很簡(jiǎn)便的,否則就需要一個(gè)第三方變量才能完成互換
?? ??? ?b[i], b[len(b)-i-1] = b[len(b)-i-1], b[i]
?? ?}

?? ?return string(b)
}

// gfdsa543321

字符串大小寫操作

這個(gè)就很簡(jiǎn)單了,直接調(diào)用 strings 包下提供的兩個(gè)方法就可以了

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := "Hello World"

?? ?// 所有字母轉(zhuǎn)為大寫
?? ?upper := strings.ToUpper(str)
?? ?fmt.Println(upper)
?? ?// 所有字母轉(zhuǎn)為小寫
?? ?lower := strings.ToLower(str)
?? ?fmt.Println(lower)
}

去除字符串首位空格

可以使用 strings 包下的方法 TrimSpace() ?,或者使用 Trim() ?方法,該方法可以刪除字符串中連續(xù)字符,用來刪除空格當(dāng)然也是可以的

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := " GO 非常好用 "

?? ?// 刪除連續(xù)字符
?? ?str1 := strings.Trim(str, " ")
?? ?// 刪除首位空格
?? ?str2 := strings.TrimSpace(str)

?? ?fmt.Println(str)
?? ?fmt.Println(str2)
?? ?fmt.Println(str1)
}

合并字符串

join() 用于將字符串切片拼接為字符串,第一個(gè)參數(shù)傳字符切片,第二個(gè)是連接符,下面示例中就是使用的空格連接

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := []string{"I", "Love", "GO"}
?? ?res := strings.Join(str, " ")
?? ?fmt.Println(res)
}

分割字符串

strings 包提供了 Split()、SplitN、SplitAfter、SplitAfterN() ?4個(gè)函數(shù)來處理正則分割字符串

func Splic(s,sep string) []string

其中 s 為被正則分割的字符串,sep為分隔符

func SplicN(s,sep string,n int) []string

其中,s 為被正則分割的字符串,sep為分隔符,n為控制分割的片數(shù),如果為 -1 則不限制

func SplicAfter(s,sep string) []string

與上面方法功能相同但是會(huì)保留分割符

func Splic(s,sep string) []string

與上面方法功能相同但是會(huì)保留分割符

package main

import (
?? ?"fmt"
?? ?"strings"
)

func main() {
?? ?str := "I_Love_Golang_web"

?? ?split1 := strings.Split(str, "_")
?? ?split2 := strings.SplitN(str, "_", 3)
?? ?split3 := strings.SplitAfter(str, "_")
?? ?split4 := strings.SplitAfterN(str, "_", 2)

?? ?for i := range split1 {
?? ??? ?fmt.Println(split1[i])
?? ?}
?? ?// I
?? ?// Love
?? ?// Golang
?? ?// web

?? ?for i := range split2 {
?? ??? ?fmt.Println(split2[i])
?? ?}
?? ?// I
?? ?// Love
?? ?// Golang_web

?? ?for i := range split3 {
?? ??? ?fmt.Println(split3[i])
?? ?}
?? ?// I_
?? ?// Love_
?? ?// Golang_
?? ?// web

?? ?for i := range split4 {
?? ??? ?fmt.Println(split4[i])
?? ?}
?? ?// I_
?? ?// Love_Golang_web
}

到此這篇關(guān)于GO 語言字符串常用操作集錦的文章就介紹到這了,更多相關(guān)GO 字符串常用操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Go?語言結(jié)構(gòu)體鏈表的基本操作

    Go?語言結(jié)構(gòu)體鏈表的基本操作

    鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的,這篇文章主要介紹了Go?語言結(jié)構(gòu)體鏈表,需要的朋友可以參考下
    2022-04-04
  • Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡(jiǎn)單例子

    Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡(jiǎn)單例子

    這篇文章主要介紹了Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡(jiǎn)單例子,本文先定義了一個(gè)結(jié)構(gòu)體,然后把JSON綁定到結(jié)構(gòu)體上實(shí)現(xiàn)讀取,需要的朋友可以參考下
    2014-10-10
  • Go語言中定時(shí)任務(wù)庫Cron使用方法介紹

    Go語言中定時(shí)任務(wù)庫Cron使用方法介紹

    cron的意思計(jì)劃任務(wù),說白了就是定時(shí)任務(wù)。我和系統(tǒng)約個(gè)時(shí)間,你在幾點(diǎn)幾分幾秒或者每隔幾分鐘跑一個(gè)任務(wù)(job),今天通過本文給大家介紹下Go語言中定時(shí)任務(wù)庫Cron使用方法,感興趣的朋友一起看看吧
    2022-03-03
  • Go語言學(xué)習(xí)之golang-jwt/jwt的教程分享

    Go語言學(xué)習(xí)之golang-jwt/jwt的教程分享

    jwt是?json?web?token的簡(jiǎn)稱。go使用jwt目前,主流使用的jwt庫是golang-jwt/jwt。本文就來和大家講講golang-jwt/jwt的具體使用,需要的可以參考一下
    2023-01-01
  • Golang import 導(dǎo)入包語法及一些特殊用法詳解

    Golang import 導(dǎo)入包語法及一些特殊用法詳解

    這篇文章主要介紹了Golang import 導(dǎo)入包語法及一些特殊用法,需要的朋友可以參考下
    2020-02-02
  • 用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語言標(biāo)準(zhǔn)庫創(chuàng)建路由,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05
  • 一文帶你吃透Golang中net/http標(biāo)準(zhǔn)庫服務(wù)端

    一文帶你吃透Golang中net/http標(biāo)準(zhǔn)庫服務(wù)端

    這篇文章將從服務(wù)端(Server)作為切入點(diǎn)和大家分享一下Go語言net/http標(biāo)準(zhǔn)庫的實(shí)現(xiàn)邏輯,進(jìn)而一步步分析http標(biāo)準(zhǔn)庫內(nèi)部是如何運(yùn)作的,感興趣的可以了解下
    2024-03-03
  • Go中的fuzz模糊測(cè)試使用實(shí)戰(zhàn)詳解

    Go中的fuzz模糊測(cè)試使用實(shí)戰(zhàn)詳解

    這篇文章主要為大家介紹了Go中的fuzz模糊測(cè)試使用實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go Time庫中時(shí)間和日期相關(guān)的操作方法整理

    Go Time庫中時(shí)間和日期相關(guān)的操作方法整理

    這篇文章主要為大家整理了Go語言中的time庫,包括時(shí)間、日期和時(shí)區(qū)等相關(guān)概念及使用方法,希望通過掌握這些知識(shí),大家可以更好地處理時(shí)間、日期和時(shí)區(qū)相關(guān)的問題
    2023-08-08
  • 詳解以go思想去處理js異常拋棄trycatch

    詳解以go思想去處理js異常拋棄trycatch

    這篇文章主要為大家介紹了詳解以go思想去處理js異常拋棄trycatch,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

兴海县| 盘锦市| 遵义市| 霍林郭勒市| 开原市| 怀安县| 万载县| 临江市| 临清市| 麦盖提县| 渝中区| 石屏县| 宁陵县| 藁城市| 东安县| 阿坝| 太湖县| 阜康市| 临泉县| 屯昌县| 岐山县| 舒兰市| 平顺县| 南京市| 勃利县| 务川| 彝良县| 惠东县| 桂林市| 依安县| 商南县| 车险| 剑河县| 莱芜市| 西华县| 岳阳县| 滕州市| 武定县| 巴林左旗| 银川市| 崇文区|