日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Go 分布式学习利器(7)-- 字符串

發(fā)布時(shí)間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 分布式学习利器(7)-- 字符串 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 字符串 聲明
    • 2. Unicode 和 utf-8的區(qū)別
    • 3. string中的字符遍歷
    • 4. string的 字符分隔 和字符拼接函數(shù)
    • 5. string to Int和 Int to string函數(shù)

1. 字符串 聲明

Go中的字符串類(lèi)型與其他編譯型語(yǔ)言的主要差異如下:

  • string 是數(shù)據(jù)類(lèi)型,不是指針或 引用類(lèi)型
  • string 是只讀的byte slice, len 函數(shù) 可以顯示該類(lèi)型變量所包含的byte數(shù)
  • string 的byte數(shù)組可以存放 任何數(shù)據(jù)(文本數(shù)據(jù)/二進(jìn)制數(shù)據(jù))

如下測(cè)試函數(shù):

func TestString(t *testing.T){var s stringt.Log(s)// s[1] = '3' // fail,字符串類(lèi)型在Go中是只讀的,嘗試修改會(huì)報(bào)編譯錯(cuò)誤s = "hello"t.Log(len(s)) // 保存字符串中的byte數(shù)s = "\xE4\xB8\xA5" // 存放二進(jìn)制數(shù)據(jù),表示一個(gè)中文的 "嚴(yán)"t.Log(s)t.Log(len(s))
}

最后的輸出如下:

=== RUN   TestStringstring_test.go:7: string_test.go:10: 5string_test.go:13: 嚴(yán)string_test.go:14: 3

2. Unicode 和 utf-8的區(qū)別

  • Unicode 是一種字符集(code point)
  • UTF8 是 unicode 的存儲(chǔ)實(shí)現(xiàn)(轉(zhuǎn)換為字節(jié)序列的規(guī)則)

如下代碼可以看到一個(gè)中文漢字在,unicode存儲(chǔ)和具體的utf-8 格式下的16進(jìn)制區(qū)別:

func TestUnicode(t *testing.T) {var s strings = "中"t.Log(len(s))c := []rune(s) // 轉(zhuǎn)換為切片t.Log(len(c)) // rune 的長(zhǎng)度t.Logf("中 unicode %x", c[0])t.Logf("中 utf-8 %x",s)
}

輸出如下:

=== RUN   TestUnicodestring_test.go:21: 3string_test.go:24: 1string_test.go:25: 中 unicode 4e2dstring_test.go:26: 中 utf-8 e4b8ad
--- PASS: TestUnicode (0.00s)

接下來(lái)我們可以整體出如下規(guī)則:

在 string中存儲(chǔ)了3個(gè)byte,分別是E4,B8,AD 即 上圖中的最后一行。

3. string中的字符遍歷

string 中的遍歷形式和之前提過(guò)的其他數(shù)組,map等形態(tài)類(lèi)似。
不過(guò)這里的輸出形式可能需要注意一下, 輸出漢字時(shí)需要格式化輸出為unicode的類(lèi)型%[1]x

func TestStringTravel(t *testing.T) {s := "我是一個(gè)中國(guó)人"for _,c := range s {t.Logf("%[1]c %[1]d",c) // 第二個(gè)輸出 %[1]d 表示string默認(rèn)轉(zhuǎn)換為的rune,不需要顯示指定.}
}

輸出如下:

=== RUN   TestStringTravelstring_test.go:32: 我 25105string_test.go:32: 是 26159string_test.go:32: 一 19968string_test.go:32: 個(gè) 20010string_test.go:32: 中 20013string_test.go:32: 國(guó) 22269string_test.go:32: 人 20154

4. string的 字符分隔 和字符拼接函數(shù)

這里簡(jiǎn)單介紹一些Go語(yǔ)言中 字符串相關(guān)的常用函數(shù):

  • strings.Split 字符串分隔函數(shù)
  • strings.Join 字符串拼接函數(shù)

注意實(shí)際使用的過(guò)程中strings是需要類(lèi)似fmt,testing這樣的import到程序中的

func TestStringFunc(t *testing.T) {s := "A,B,C"sp := strings.Split(s, ",") // split函數(shù) 通過(guò)逗號(hào) 將 s 分割為字符串?dāng)?shù)組for _,c := range sp{t.Log(c)}t.Logf("%T %T",sp,sp[0])attach := strings.Join(sp,"-") // Join函數(shù),重新指定具體的鏈接符,將字符串?dāng)?shù)組中的字符串用鏈接起來(lái)t.Log(attach)
}

輸出如下:

=== RUN   TestStringFuncstring_test.go:44: Astring_test.go:44: Bstring_test.go:44: Cstring_test.go:46: []string string # 分隔后的結(jié)果是一個(gè)字符串?dāng)?shù)組,數(shù)組內(nèi)的每一個(gè)元素都是字符串string_test.go:50: A-B-C
--- PASS: TestStringFunc (0.00s)

5. string to Int和 Int to string函數(shù)

  • strconv.Itoa 整型轉(zhuǎn)字符串
  • strconv.Atoi 字符串轉(zhuǎn)整型

其中strconv.Atoi 字符串轉(zhuǎn)整型函數(shù) 會(huì)返回兩個(gè)值,一個(gè)是正常的轉(zhuǎn)換成功的值,一個(gè)是轉(zhuǎn)換失敗的返回值。
測(cè)試函數(shù)如下:

func TestStringExchangeInt(t *testing.T) {s := strconv.Itoa(10) // 整型轉(zhuǎn)字符串t.Log("str" + s)a,err:= strconv.Atoi("10")if err == nil{t.Log(10 + a)}
}

輸出如下:

=== RUN   TestStringExchangeIntstring_test.go:56: str10string_test.go:60: 20
--- PASS: TestStringExchangeInt (0.00s)

總結(jié)

以上是生活随笔為你收集整理的Go 分布式学习利器(7)-- 字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。