溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Golang語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用案例分析

發(fā)布時(shí)間:2021-11-16 09:06:14 來(lái)源:億速云 閱讀:144 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Golang語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用案例分析”,在日常操作中,相信很多人在Golang語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用案例分析問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Golang語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用案例分析”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

01 介紹

在 Golang 語(yǔ)言項(xiàng)目開(kāi)發(fā)中,因?yàn)?Golang 語(yǔ)言是強(qiáng)類型,所以經(jīng)常會(huì)使用到類型轉(zhuǎn)換。本文我們介紹類型轉(zhuǎn)換三方庫(kù) - github.com/spf13/cast ,它是一個(gè)極簡(jiǎn)類型轉(zhuǎn)換的三方庫(kù),通過(guò)它提供的函數(shù),可以方便我們進(jìn)行類型轉(zhuǎn)換,極大提升我們的開(kāi)發(fā)效率。

并且, cast 按照一定規(guī)則,自動(dòng)執(zhí)行正確的操作,例如,當(dāng)我們使用  cast.ToInt() 將字符串轉(zhuǎn)換為整型時(shí),只有參數(shù)是 int 的字符串時(shí),例如  "4" ,它才會(huì)將參數(shù)轉(zhuǎn)換為整型,否則轉(zhuǎn)換為整型零值。

其實(shí),當(dāng)我們需要各種整型和浮點(diǎn)型之間轉(zhuǎn)換時(shí),可以使用強(qiáng)制類型轉(zhuǎn)換;各種整型和字符串之間轉(zhuǎn)換時(shí),可以使用標(biāo)準(zhǔn)庫(kù) strconv 操作,但是使用方式都不夠優(yōu)雅。并且,如果需要轉(zhuǎn)換的值是接口類型時(shí),還需要先類型斷言,再進(jìn)行類型轉(zhuǎn)換,這一切都顯得比較復(fù)雜。 cast 可以將這些工作變得簡(jiǎn)單,使我們的代碼更優(yōu)雅。

雖然 cast 使用比較簡(jiǎn)單,它提供了一些  cast.ToXxx() 和  cast.ToXxxE() 函數(shù) ,我們還是通過(guò)一些簡(jiǎn)單示例,比如使用頻率相對(duì)較高的轉(zhuǎn)換為字符串類型,介紹  cast 的用法。

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

我們可以使用 cast.ToString() 函數(shù) ,將給定參數(shù)轉(zhuǎn)換為字符串類型,如果給定參數(shù)無(wú)法轉(zhuǎn)換為字符串類型,將會(huì)返回類型零值(字符串類型零值 - 空字符串)。

示例代碼:

a := 1
fmt.Printf("val=%v type=%T\n", cast.ToString(a), cast.ToString(a))
b := 3.14
fmt.Printf("val=%v type=%T\n", cast.ToString(b), cast.ToString(b))
c := "hello"
fmt.Printf("val=%v type=%T\n", cast.ToString(c), cast.ToString(c))
d := []byte("golang")
fmt.Printf("val=%v type=%T\n", cast.ToString(d), cast.ToString(d))
var e interface{} = "frank"
fmt.Printf("val=%v type=%T\n", cast.ToString(e), cast.ToString(e))
f := []int{1, 2, 3}
fmt.Printf("val=%v type=%T\n", f, f)
fmt.Printf("val=%v type=%T\n", cast.ToString(nil), cast.ToString(nil))

輸出結(jié)果:

val=1 type=string
val=3.14 type=string
val=hello type=string
val=golang type=string
val=frank type=string
val= type=string // 值為空字符串
val= type=string // 值為空字符串

閱讀上面這段代碼,我們可以發(fā)現(xiàn)最后兩行代碼的輸出結(jié)果都是空字符串,實(shí)際上并非如此,我們可以使用 cast.ToStringE() 函數(shù) 轉(zhuǎn)換參數(shù)  f ,再看一下返回結(jié)果。

示例代碼:

v, err := cast.ToStringE([]int{1,2,3})
if err != nil {
  fmt.Println(err)
  return
}
fmt.Printf("val=%v type=%T\n", v, v)

輸出結(jié)果:

unable to cast []int{1, 2, 3} of type []int to string

閱讀上面這段代碼,我們可以發(fā)現(xiàn),相同的給定參數(shù),使用不同 函數(shù) ( cast.ToString() 和  cast.ToStringE() ),得到的返回結(jié)果不同。

閱讀 cast 源碼,我們可以發(fā)現(xiàn), cast.ToString() 底層實(shí)現(xiàn)是調(diào)用  cast.ToStringE() ,只不過(guò)是將  cast.ToStringE() 返回的錯(cuò)誤忽略了。

源碼:

// ToString casts an interface to a string type.
func ToString(i interface{}) string {
 v, _ := ToStringE(i)
 return v
}

我們可以使用 cast.ToxxxE() 函數(shù) ,判定轉(zhuǎn)換后得到的類型零值是否是錯(cuò)誤。

到此,關(guān)于“Golang語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用案例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI