亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言中如何通過(guò)方法為類型添加行為

 更新時(shí)間:2020年09月08日 08:41:26   作者:huangz/blog  
這篇文章主要介紹了Go語(yǔ)言中如何通過(guò)方法為類型添加行為的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

數(shù)十年以來(lái), 傳統(tǒng)的面向?qū)ο笳Z(yǔ)言總是說(shuō)方法屬于類, 但 Go 不是這樣做的: 它提供了方法, 但是并沒(méi)有提供類和對(duì)象。 乍一看, 這種做法似乎有些奇怪, 甚至可以說(shuō)有點(diǎn)兒瘋狂, 但實(shí)際上 Go 的方法比以往其他語(yǔ)言的方法都要靈活。

使用 kelvinToCelsius 、 celsiusToFahrenheit 、 fahrenheitToCelsius 、 celsiusToKelvin 這樣的函數(shù)雖然也能夠完成溫度轉(zhuǎn)換工作, 但是通過(guò)聲明相應(yīng)的方法并把它們放置到屬于自己的地方, 能夠讓溫度轉(zhuǎn)換代碼變得更加簡(jiǎn)潔明了。

我們可以將方法與同一個(gè)包中聲明的任何類型相關(guān)聯(lián), 但是不能為 int 和 float64 之類的預(yù)聲明類型關(guān)聯(lián)方法。 其中, 聲明類型的方法在前面已經(jīng)介紹過(guò)了:

type kelvin float64

kelvin 類型跟它的底層類型 float64 具有相同的行為, 我們可以像處理浮點(diǎn)數(shù)那樣, 對(duì) kelvin 類型的值執(zhí)行加法運(yùn)算、乘法運(yùn)算以及其他操作。 此外, 聲明一個(gè)將 kelvin 轉(zhuǎn)換為 celsius 的方法就跟聲明一個(gè)具有同等作用的函數(shù)一樣簡(jiǎn)單——它們都以關(guān)鍵字 func 開(kāi)頭, 并且函數(shù)體跟方法體完全一樣:

func kelvinToCelsius(k kelvin) celsius {  // kelvinToCelsius 函數(shù)
  return celsius(k - 273.15)
}
func (k kelvin) celsius() celsius {  // kelvin 類型的 celsius 方法
  return celsius(k - 273.15)
}

如圖 13-1 所示, celsius 方法雖然沒(méi)有接受任何形參, 但它的名字前面卻有一個(gè)類似形參的接收者。 每個(gè)方法和函數(shù)都可以接受多個(gè)形參, 但一個(gè)方法必須并且只能有一個(gè)接收者。 在 celsius 方法體中, 接收者的行為就跟其他形參一樣。


圖 13-1 方法聲明

除聲明語(yǔ)法有些許不同之外, 調(diào)用方法的語(yǔ)法與調(diào)用函數(shù)的語(yǔ)法也不一樣:

var k kelvin = 294.0
var c celsius

c = kelvinToCelsius(k)   // 調(diào)用 kelvinToCelsius 函數(shù)
c = k.celsius()  // 調(diào)用celsius方法

跟調(diào)用其他包中的函數(shù)一樣, 調(diào)用方法也需要用到點(diǎn)記號(hào)。 以上面的代碼為例, 在調(diào)用方法的時(shí)候, 程序首先需要給出正確類型的變量, 接著是一個(gè)點(diǎn)號(hào), 最后才是被調(diào)用方法的名字。

既然溫度轉(zhuǎn)換操作現(xiàn)在已經(jīng)是 kelvin 類型的方法, 那么繼續(xù)使用 kelvinToCelsius 這樣的名字就沒(méi)有必要了。 在同一個(gè)包里面, 如果一個(gè)名字已經(jīng)被函數(shù)占用了, 那么這個(gè)包就無(wú)法再定義同名的類型, 因此在使用函數(shù)的情況下, 我們將無(wú)法使用 celsius 函數(shù)返回 celsius 類型的值。 然而, 如果我們使用的是方法, 那么每種溫度類型都可以具有自己的 celsius 方法, 就像以下展示的 fahrenheit 類型一樣:

type fahrenheit float64
// celsius方法會(huì)將華氏度轉(zhuǎn)換為攝氏度
func (f fahrenheit) celsius() celsius {
return celsius((f - 32.0) * 5.0 / 9.0) }

通過(guò)讓每種溫度類型都具有相應(yīng)的 celsius 方法以轉(zhuǎn)換為攝氏溫度, 我們可以創(chuàng)造出一種完美的對(duì)稱。

總結(jié)

到此這篇關(guān)于Go語(yǔ)言中如何通過(guò)方法為類型添加行為的文章就介紹到這了,更多相關(guān)Go語(yǔ)言通過(guò)方法為類型添加行為內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Go語(yǔ)言中select語(yǔ)句的常見(jiàn)用法

    詳解Go語(yǔ)言中select語(yǔ)句的常見(jiàn)用法

    這篇文章主要是來(lái)和大家介紹一下Go語(yǔ)言中select?語(yǔ)句的常見(jiàn)用法,以及在使用過(guò)程中的注意事項(xiàng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中

    Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中

    這篇文章主要介紹了Golang監(jiān)聽(tīng)日志文件并發(fā)送到kafka中,日志收集項(xiàng)目的準(zhǔn)備中,本文主要講的是利用golang的tail庫(kù),監(jiān)聽(tīng)日志文件的變動(dòng),將日志信息發(fā)送到kafka中?,需要的朋友可以參考一下
    2022-04-04
  • Golang實(shí)現(xiàn)將中文轉(zhuǎn)化為拼音

    Golang實(shí)現(xiàn)將中文轉(zhuǎn)化為拼音

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Golang實(shí)現(xiàn)將中文轉(zhuǎn)化為拼音功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Golang?websocket協(xié)議使用淺析

    Golang?websocket協(xié)議使用淺析

    這篇文章主要介紹了Golang?websocket協(xié)議的使用,WebSocket是一種新型的網(wǎng)絡(luò)通信協(xié)議,可以在Web應(yīng)用程序中實(shí)現(xiàn)雙向通信,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • go程序中同一個(gè)包下為什么會(huì)存在多個(gè)同名的函數(shù)或變量(詳細(xì)解析)

    go程序中同一個(gè)包下為什么會(huì)存在多個(gè)同名的函數(shù)或變量(詳細(xì)解析)

    這篇文章主要介紹了go程序中同一個(gè)包下為什么會(huì)存在多個(gè)同名的函數(shù)或變量(詳細(xì)解析),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-05-05
  • Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟

    Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語(yǔ)言實(shí)現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go開(kāi)發(fā)Gin項(xiàng)目添加jwt功能實(shí)例詳解

    Go開(kāi)發(fā)Gin項(xiàng)目添加jwt功能實(shí)例詳解

    這篇文章主要為大家介紹了Go開(kāi)發(fā)Gin項(xiàng)目中添加jwt功能實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • GO項(xiàng)目部署Linux服務(wù)器的實(shí)現(xiàn)示例

    GO項(xiàng)目部署Linux服務(wù)器的實(shí)現(xiàn)示例

    本文主要介紹了GO項(xiàng)目部署Linux服務(wù)器的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Go異步任務(wù)解決方案之Asynq庫(kù)詳解

    Go異步任務(wù)解決方案之Asynq庫(kù)詳解

    需要在Go應(yīng)用程序中異步處理任務(wù)? Asynq,簡(jiǎn)單高效的任務(wù)隊(duì)列實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Go異步任務(wù)解決方案之Asynq庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • go結(jié)構(gòu)體嵌套的切片數(shù)組操作

    go結(jié)構(gòu)體嵌套的切片數(shù)組操作

    這篇文章主要介紹了go結(jié)構(gòu)體嵌套的切片數(shù)組操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論