溫馨提示×

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

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

怎么在Golang中轉(zhuǎn)換自定義類型

發(fā)布時(shí)間:2021-02-22 15:26:29 來(lái)源:億速云 閱讀:451 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

怎么在Golang中轉(zhuǎn)換自定義類型?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

golang適合做什么

golang可以做服務(wù)器端開(kāi)發(fā),但golang很適合做日志處理、數(shù)據(jù)打包、虛擬機(jī)處理、數(shù)據(jù)庫(kù)代理等工作。在網(wǎng)絡(luò)編程方面,它還廣泛應(yīng)用于web應(yīng)用、API應(yīng)用等領(lǐng)域。

轉(zhuǎn)換成實(shí)現(xiàn)了某個(gè)(些)接口的自定義類型

比如:sort包里面的IntSlice,是一個(gè)[]int的自定義類型,并且實(shí)現(xiàn)了sort.Interface接口,如下所示:

type IntSlice []int

// 實(shí)現(xiàn)sort.Interface接口的方法
func (p IntSlice) Len() int      { return len(p) }
func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p IntSlice) Swap(i, j int)   { p[i], p[j] = p[j], p[i] }
// 一個(gè)便捷方法
func (p IntSlice) Sort() { Sort(p) }

當(dāng)我們需要對(duì)一個(gè)int切片進(jìn)行排序的時(shí)候,我們就可以直接把[]int]轉(zhuǎn)換成sort.IntSlice,然后直接調(diào)用Sort()方法。

 ints := []int{1, 7, 2, 3, 8, 0}
 sort.IntSlice(ints).Sort()

將函數(shù)轉(zhuǎn)換成實(shí)現(xiàn)了某個(gè)(些)接口的函數(shù)

典型的一個(gè)案例就是http.HandlerFunc,通過(guò)這個(gè)類型,可以使得一個(gè)普通函數(shù)成為一個(gè)Http處理器(handler)。

type HandlerFunc func(ResponseWriter, *Request)

// 實(shí)現(xiàn)http.Handler接口的方法
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
  f(w, r)
}

只要某個(gè)函數(shù)f具有跟HandlerFunc一樣的函數(shù)簽名(signature),那么這個(gè)函數(shù)就可以被轉(zhuǎn)換成http.HandlerFunc。而

http.HandlerFunc又實(shí)現(xiàn)了http.Handler接口,那么這個(gè)函數(shù)f就可以被http服務(wù)器調(diào)用了。

func f(w ResponseWriter, r *Request) {
 //...
}

http.Handle("/args", http.HandlerFunc(f))

在Golang中,這種用法很普遍,可以使用更少的代碼實(shí)現(xiàn)與其他語(yǔ)言一樣的功能。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向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