最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • Goland?Gin?框架中的表單處理與數(shù)據(jù)綁定的操作方法

    Goland?Gin?框架中的表單處理與數(shù)據(jù)綁定的操作方法

    本文詳細(xì)介紹了Gin框架中表單處理的功能,包括數(shù)據(jù)綁定、驗(yàn)證和文件上傳等,并通過(guò)一個(gè)完整的用戶注冊(cè)項(xiàng)目示例展示了實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法

    Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法

    對(duì)音視頻一直是小白,決定沉下心來(lái),好好研究一下音視頻知識(shí),下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2022-12-12
  • 一文深入探討Go語(yǔ)言中的if-else語(yǔ)句

    一文深入探討Go語(yǔ)言中的if-else語(yǔ)句

    在Go語(yǔ)言中,條件語(yǔ)句的使用方式相對(duì)簡(jiǎn)潔明了,所以本文將探討一下如何在Go程序中有效地進(jìn)行條件判斷和邏輯控制,感興趣的小伙伴可以了解下
    2023-08-08
  • Golang中使用JSON的一些小技巧分享

    Golang中使用JSON的一些小技巧分享

    這篇文章主要分享了Golang中使用JSON的一些小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    這篇文章主要介紹了go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理,這里提供一個(gè)通過(guò)docker快速安裝Consul的方式,當(dāng)然前提是你得安裝了docker,需要的朋友可以參考下
    2022-04-04
  • 詳解如何在Go服務(wù)中做鏈路追蹤

    詳解如何在Go服務(wù)中做鏈路追蹤

    使用 Go 語(yǔ)言開(kāi)發(fā)微服務(wù)的時(shí)候,需要追蹤每一個(gè)請(qǐng)求的訪問(wèn)鏈路,本文主要介紹了如何在Go 服務(wù)中做鏈路追蹤,感興趣的可以了解一下
    2021-09-09
  • 詳解Golang time包中的結(jié)構(gòu)體time.Ticker

    詳解Golang time包中的結(jié)構(gòu)體time.Ticker

    在日常開(kāi)發(fā)過(guò)程中,會(huì)頻繁遇到對(duì)時(shí)間進(jìn)行操作的場(chǎng)景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對(duì)時(shí)間的相關(guān)操作,接下來(lái)的幾篇文章會(huì)詳細(xì)講解 time 包,本文講解一下 time 包中的結(jié)構(gòu)體 time.Ticker,需要的朋友可以參考下
    2023-08-08
  • Go錯(cuò)誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法

    Go錯(cuò)誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法

    這篇文章主要介紹了Go錯(cuò)誤處理之panic函數(shù)使用及捕獲,本篇探討了如何使用 panic 和 recover 來(lái)處理 Go 語(yǔ)言中的異常,需要的朋友可以參考下
    2023-03-03
  • 安裝Sublime?Text支持Go插件的方法步驟

    安裝Sublime?Text支持Go插件的方法步驟

    本文主要介紹了安裝Sublime?Text支持Go插件的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • golang中日期操作之日期格式化及日期轉(zhuǎn)換

    golang中日期操作之日期格式化及日期轉(zhuǎn)換

    在編程中,程序員會(huì)經(jīng)常使用到日期相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于golang中日期操作之日期格式化及日期轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評(píng)論

卢氏县| 林甸县| 长阳| 石家庄市| 安远县| 东兰县| 西充县| 广州市| 石渠县| 共和县| 鄱阳县| 海淀区| 红安县| 丹东市| 凤阳县| 郓城县| 镇安县| 汉中市| 元阳县| 浮山县| 塔城市| 武邑县| 娱乐| 广德县| 泸定县| 贵港市| 加查县| 正宁县| 鹤庆县| 桦南县| 中卫市| 蒲江县| 梧州市| 云梦县| 昌都县| 安达市| 平昌县| 苏尼特右旗| 东宁县| 宣恩县| 澄江县|