日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Go 語言字符串使用方式與技巧

來源: 責(zé)編: 時(shí)間:2023-12-11 09:27:25 235觀看
導(dǎo)讀01 、介紹關(guān)于 Go 語言字符串的使用,我們需要了解標(biāo)準(zhǔn)庫 strconv 和標(biāo)準(zhǔn)庫 strings 的使用方式,它們分別用于字符串類型轉(zhuǎn)換和字符串操作。本文我們重點(diǎn)介紹 Go 語言字符串使用方式與技巧。02 、字符串類型轉(zhuǎn)換Go 語言

01 、介紹

關(guān)于 Go 語言字符串的使用,我們需要了解標(biāo)準(zhǔn)庫 strconv 和標(biāo)準(zhǔn)庫 strings 的使用方式,它們分別用于字符串類型轉(zhuǎn)換和字符串操作。8fL28資訊網(wǎng)——每日最新資訊28at.com

本文我們重點(diǎn)介紹 Go 語言字符串使用方式與技巧。8fL28資訊網(wǎng)——每日最新資訊28at.com

02 、字符串類型轉(zhuǎn)換

Go 語言是強(qiáng)類型語言,在使用 Go 語言時(shí),通常會(huì)遇到需要將字符串與其它類型相互轉(zhuǎn)換的場(chǎng)景。8fL28資訊網(wǎng)——每日最新資訊28at.com

此時(shí),我們可以使用標(biāo)準(zhǔn)庫 strconv。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串 to 布爾

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v := "true" if s, err := strconv.ParseBool(v); err == nil {  fmt.Printf("%T, %v/n", s, s) }}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

bool, true

閱讀上面這段代碼,我們使用 func ParseBool(str string) (bool, error) 將字符串轉(zhuǎn)換為布爾。需要注意的是,該函數(shù)接收參數(shù)的值是有限制的,除了 1、t、T、TRUE、true、True、0、f、F、FALSE、false、False 之外,其它任何值都會(huì)返回 error。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串 to 浮點(diǎn)型

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v := "3.1415926535" if s, err := strconv.ParseFloat(v, 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat(v, 64); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("NaN", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } // ParseFloat is case insensitive if s, err := strconv.ParseFloat("nan", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("inf", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("+Inf", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("-Inf", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("-0", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) } if s, err := strconv.ParseFloat("+0", 32); err == nil {  fmt.Printf("%T, %v/n", s, s) }}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

float64, 3.1415927410125732float64, 3.1415926535float64, NaNfloat64, NaNfloat64, +Inffloat64, +Inffloat64, -Inffloat64, -0float64, 0

閱讀上面這段代碼,我們使用 func ParseFloat(s string, bitSize int) (float64, error) 將字符串轉(zhuǎn)換為 64 位浮點(diǎn)數(shù)。需要注意的是,該函數(shù)接收參數(shù)可以識(shí)別值為 NaN、Inf(有符號(hào) +Inf 或 -Inf),并且忽略它們的大小寫。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串 to 整型

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v32 := "-354634382" if s, err := strconv.ParseInt(v32, 10, 32); err == nil {  fmt.Printf("s:%T, %v/n", s, s) } if s1, err := strconv.ParseInt(v32, 16, 32); err == nil {  fmt.Printf("s1:%T, %v/n", s1, s1) } v64 := "-3546343826724305832" if s2, err := strconv.ParseInt(v64, 10, 64); err == nil {  fmt.Printf("s2:%T, %v/n", s2, s2) } if s3, err := strconv.ParseInt(v64, 16, 64); err == nil {  fmt.Printf("s3:%T, %v/n", s3, s3) }}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

s:int64, -354634382s2:int64, -3546343826724305832

閱讀上面這段代碼,我們使用 func ParseInt(s string, base int, bitSize int) (i int64, err error) 將字符串轉(zhuǎn)換為整型。8fL28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,該函數(shù)的第一個(gè)入?yún)樽址愋偷臄?shù)值,可以 "+" 或 "-" 符號(hào)開頭;8fL28資訊網(wǎng)——每日最新資訊28at.com

第二個(gè)參數(shù)指定進(jìn)制,它的值如果是 0,進(jìn)制則以第一個(gè)參數(shù)符號(hào)后的前綴決定,例如:"0b" 為 2,"0" 或 "0o" 為 8,"0x" 為 16,否則為 10;8fL28資訊網(wǎng)——每日最新資訊28at.com

第三個(gè)參數(shù)指定返回結(jié)果必須符合整數(shù)類型的取值范圍,它的值為 0、8、16、32 和 64,分別代表 int、int8、int16、int32 和 int64。8fL28資訊網(wǎng)——每日最新資訊28at.com

細(xì)心的讀者朋友們可能已經(jīng)發(fā)現(xiàn),示例代碼中,第 2 和 第 4 返回錯(cuò)誤,原因是第二個(gè)參數(shù)指定的進(jìn)制與第一個(gè)參數(shù)的數(shù)值不相符,超出取值范圍。8fL28資訊網(wǎng)——每日最新資訊28at.com

此外,函數(shù) func ParseUint(s string, base int, bitSize int) (uint64, error) 與之類似,但是用于無符號(hào)整數(shù)。8fL28資訊網(wǎng)——每日最新資訊28at.com

在實(shí)際項(xiàng)目開發(fā)中,十進(jìn)制使用的最多,所以標(biāo)準(zhǔn)庫 strconv 提供了函數(shù) func Atoi(s string) (int, error),它的功能類似 ParseInt(s, 10, 0),需要注意的是,它的返回值類型是 int(需要注意取值范圍),而不是 int64。8fL28資訊網(wǎng)——每日最新資訊28at.com

布爾 to 字符串

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v := true s := strconv.FormatBool(v) fmt.Printf("%T, %v/n", s, s)}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

string, true

閱讀上面這段代碼,我們使用 func FormatBool(b bool) string 將布爾轉(zhuǎn)換為字符串。8fL28資訊網(wǎng)——每日最新資訊28at.com

浮點(diǎn)型 to 字符串

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v := 3.1415926535 s32 := strconv.FormatFloat(v, 'E', -1, 32) fmt.Printf("%T, %v/n", s32, s32) s64 := strconv.FormatFloat(v, 'E', -1, 64) fmt.Printf("%T, %v/n", s64, s64) fmt64 := strconv.FormatFloat(v, 'g', -1, 64) fmt.Printf("%T, %v/n", fmt64, fmt64)}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

string, 3.1415927E+00string, 3.1415926535E+00string, 3.1415926535

閱讀上面這段代碼,我們使用 func FormatFloat(f float64, fmt byte, prec, bitSize int) string 將浮點(diǎn)型轉(zhuǎn)換為字符串。該函數(shù)包含 4 個(gè)參數(shù),第一個(gè)參數(shù)是需要轉(zhuǎn)換的浮點(diǎn)數(shù);第二個(gè)參數(shù)是進(jìn)制;第三個(gè)參數(shù)是精度,第四個(gè)參數(shù)是轉(zhuǎn)換后值的取值范圍。8fL28資訊網(wǎng)——每日最新資訊28at.com

其中,第二個(gè)參數(shù) b 代表二進(jìn)制指數(shù);e 或 E 代表十進(jìn)制指數(shù);f 代表無進(jìn)制指數(shù);g 或 G 代表指數(shù)大時(shí) 為 e,反之為 f;x 或 X 代表十六進(jìn)制分?jǐn)?shù)和二進(jìn)制指數(shù)。8fL28資訊網(wǎng)——每日最新資訊28at.com

第三個(gè)參數(shù),精度 prec 控制由 'e','E','f','g','G','x' 和 'X' 格式打印的位數(shù)(不包括指數(shù))。對(duì)于 'e','E','f','x' 和 'X',它是小數(shù)點(diǎn)后的位數(shù)。對(duì)于 'g' 和 'G',它是有效數(shù)字的最大數(shù)目(去掉后面的零)。特殊精度 -1 使用所需的最小位數(shù),以便 ParseFloat 精確返回 f。8fL28資訊網(wǎng)——每日最新資訊28at.com

整型 to 字符串

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { v := int64(-42) s10 := strconv.FormatInt(v, 10) fmt.Printf("%T, %v/n", s10, s10) s16 := strconv.FormatInt(v, 16) fmt.Printf("%T, %v/n", s16, s16)}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

string, -42string, -2a

閱讀上面這段代碼,我們使用 func FormatInt(i int64, base int) string 將整型轉(zhuǎn)換為字符串。需要注意的是,第二個(gè)參數(shù)的取值范圍 2 <= base <= 36。8fL28資訊網(wǎng)——每日最新資訊28at.com

此外,函數(shù) func FormatUint(i uint64, base int) string 與之功能類型,區(qū)別是僅用于轉(zhuǎn)換無類型整數(shù)。8fL28資訊網(wǎng)——每日最新資訊28at.com

在實(shí)際項(xiàng)目開發(fā)中,十進(jìn)制使用的最多,所以標(biāo)準(zhǔn)庫 strconv 提供了函數(shù) func Itoa(i int) string,它的功能類似 FormatInt(int64(i), 10),需要注意的是,該函數(shù)入?yún)⒌念愋褪?nbsp;int。8fL28資訊網(wǎng)——每日最新資訊28at.com

03 、字符串操作

關(guān)于字符串操作,標(biāo)準(zhǔn)庫 strings 提供了相關(guān)函數(shù),我們介紹幾個(gè)常用的函數(shù)。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串中是否包含指定字符串

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { fmt.Println(strings.Contains("seafood", "foo")) fmt.Println(strings.Contains("seafood", "bar")) fmt.Println(strings.Contains("seafood", "")) fmt.Println(strings.Contains("", ""))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

truefalsetruetrue

閱讀上面這段代碼,我們使用 func Contains(s, substr string) bool 在字符串 substr 中查找 s,存在則返回 true,反之返回 false。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串中是否包含指定字符串中任意字符

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { fmt.Println(strings.ContainsAny("team", "i")) fmt.Println(strings.ContainsAny("fail", "ui")) fmt.Println(strings.ContainsAny("ure", "ui")) fmt.Println(strings.ContainsAny("failure", "ui")) fmt.Println(strings.ContainsAny("foo", "")) fmt.Println(strings.ContainsAny("", ""))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

falsetruetruetruefalsefalse

閱讀上面這段代碼,我們使用 func ContainsAny(s, chars string) bool 在字符串 s 中查找是否包含字符串 chars 中任意字符,存在則返回 true,反之返回 false。8fL28資訊網(wǎng)——每日最新資訊28at.com

刪除字符串中指定字符8fL28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { fmt.Print(strings.Trim("???Hello, Gophers!!!", "!?"))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

Hello, Gophers

閱讀上面這段代碼,我們使用 func Trim(s, cutset string) string 刪除字符串 s 中的字符 cutset。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串轉(zhuǎn)換為大寫8fL28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { fmt.Println(strings.ToUpper("Gopher"))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

GOPHER

閱讀上面這段代碼,我們使用 func ToUpper(s string) string 將字符串中的字符全部轉(zhuǎn)換為大寫。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串以指定字符拆分為字符串切片8fL28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { fmt.Printf("%q/n", strings.Split("a,b,c", ",")) fmt.Printf("%q/n", strings.Split("a man a plan a canal panama", "a ")) fmt.Printf("%q/n", strings.Split(" xyz ", "")) fmt.Printf("%q/n", strings.Split("", "Bernardo O'Higgins"))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

["a" "b" "c"]["" "man " "plan " "canal panama"][" " "x" "y" "z" " "][""]

閱讀上面這段代碼,我們使用 func Split(s, sep string) []string 將字符串 s 以字符串 sep 為分隔符,拆分為字符串切片。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串切片拼接為字符串8fL28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() { s := []string{"foo", "bar", "baz"} fmt.Println(strings.Join(s, ", "))}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

foo, bar, baz

閱讀上面這段代碼,我們使用 func Join(elems []string, sep string) string 將字符串切片中的所有元素,以 sep 為分隔符,拼接為字符串。8fL28資訊網(wǎng)——每日最新資訊28at.com

04 、字符串拼接

關(guān)于字符串拼接,分為編譯時(shí)字符串拼接,和運(yùn)行時(shí)字符串拼接。8fL28資訊網(wǎng)——每日最新資訊28at.com

其中,編譯時(shí)字符串拼接,即使用 + 將多個(gè)字符串拼接為一個(gè)字符串,需要注意的是,在使用 + 拼接字符串時(shí),如果存在字符串變量,則會(huì)在運(yùn)行時(shí)拼接。8fL28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:8fL28資訊網(wǎng)——每日最新資訊28at.com

func main() {    str := "hello" + " world"    fmt.Println(str)    name := "frank"    outPut := "My name is " + name    fmt.Println(outPut)}

輸出結(jié)果:8fL28資訊網(wǎng)——每日最新資訊28at.com

hello worldMy name is frank

閱讀上面這段代碼,第一個(gè)字符串拼接是在編譯時(shí)拼接,第二個(gè)字符串拼接是在運(yùn)行時(shí)拼接。8fL28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,運(yùn)行時(shí)拼接是分配一塊新的內(nèi)存空間,通過內(nèi)存拷貝的方式將字符串拷貝到新內(nèi)存空間。8fL28資訊網(wǎng)——每日最新資訊28at.com

如果拼接后的字符串小于 32 字節(jié),可以使用臨時(shí)緩存;如果拼接后的字符串大于 32 字節(jié),需要在堆區(qū)分配一塊內(nèi)存空間,并將需要拼接的多個(gè)字符串通過內(nèi)存拷貝的形式拷貝過去。8fL28資訊網(wǎng)——每日最新資訊28at.com

字符串與字節(jié)數(shù)組互相轉(zhuǎn)換時(shí),也需要通過內(nèi)存拷貝的方式,如果字符串大于 32 字節(jié),需要在堆區(qū)分配一塊內(nèi)存空間,所以在一些轉(zhuǎn)換密集的場(chǎng)景,我們需要特別注意。8fL28資訊網(wǎng)——每日最新資訊28at.com

此外,除了使用操作符 + 或 += 拼接字符串之外,還有多種字符串拼接方式,例如,fmt.Sprintf、bytes.Buffer、strings.Join 和 stings.Builder。這些字符串拼接方式在之前的文章 「Golang 語言怎么高效拼接字符串?」 介紹過,本文不再贅述。8fL28資訊網(wǎng)——每日最新資訊28at.com

05 、總結(jié)

本文我們介紹 Go 語言中字符串的使用方式,包括類型轉(zhuǎn)換、字符串操作、字符串拼接。8fL28資訊網(wǎng)——每日最新資訊28at.com

除了使用標(biāo)準(zhǔn)庫 strconv 進(jìn)行字符串類型轉(zhuǎn)換之外,讀者朋友們也可以選擇三方庫,例如:github.com/spf13/cast。8fL28資訊網(wǎng)——每日最新資訊28at.com

建議讀者朋友們閱讀標(biāo)準(zhǔn)庫文檔,了解更多關(guān)于標(biāo)準(zhǔn)庫 strconv 和 strings 的函數(shù)。8fL28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-41701-0.htmlGo 語言字符串使用方式與技巧

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Vue3 學(xué)習(xí)筆記,如何理解 Computed 計(jì)算屬性

下一篇: 四個(gè)令人意外的不可靠可觀測(cè)性的成本

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機(jī)將會(huì)在第三季度上市,如今隨著時(shí)間臨近,新機(jī)的各種消息也開始浮出水面。據(jù)悉,這款新機(jī)將會(huì)被命名為&ldquo;On
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對(duì)象、數(shù)組等,只要不斷地創(chuàng)建這些對(duì)象,并且保證 GC Roots 到對(duì)象之間有可達(dá)路徑來避免垃 圾收集回收機(jī)制清除這些對(duì)象,當(dāng)這些對(duì)象所占空間超過
  • 中國家電海外掘金正當(dāng)時(shí)|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場(chǎng)戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產(chǎn)懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風(fēng)頭無兩。你可以說陳思誠的
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報(bào)告。ESG是&ldquo;環(huán)境保
  • 3699元!iQOO Neo8 Pro頂配版今日首銷:1TB UFS 4.0同價(jià)位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro兩個(gè)版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更是首發(fā)搭載了聯(lián)發(fā)科天璣9200+旗艦
  • SN570 NVMe SSD固態(tài)硬盤 價(jià)格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 主站蜘蛛池模板: 镇康县| 丰顺县| 禄劝| 太仓市| 库车县| 黔西| 济宁市| 呼伦贝尔市| 年辖:市辖区| 庄河市| 大同县| 蒙山县| 虹口区| 河池市| 民丰县| 曲周县| 驻马店市| 东光县| 福清市| 廉江市| 陇南市| 卢湾区| 文安县| 白银市| 海晏县| 县级市| 寻乌县| 徐汇区| 修水县| 南陵县| 山东| 天气| 白玉县| 商水县| 张北县| 淳安县| 祁连县| 巴林右旗| 红河县| 大洼县| 项城市|