濮阳杆衣贸易有限公司

主頁 > 知識庫 > Go語言中如何通過方法為類型添加行為

Go語言中如何通過方法為類型添加行為

熱門標簽:濮陽自動外呼系統(tǒng)代理 澳門防封電銷卡 廣東語音外呼系統(tǒng)供應(yīng)商 賺地圖標注的錢犯法嗎 長沙ai機器人電銷 福州鐵通自動外呼系統(tǒng) 地圖標注測試 烏魯木齊人工電銷機器人系統(tǒng) 智能電銷機器人營銷

前言

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

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

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

type kelvin float64

kelvin 類型跟它的底層類型 float64 具有相同的行為, 我們可以像處理浮點數(shù)那樣, 對 kelvin 類型的值執(zhí)行加法運算、乘法運算以及其他操作。 此外, 聲明一個將 kelvin 轉(zhuǎn)換為 celsius 的方法就跟聲明一個具有同等作用的函數(shù)一樣簡單——它們都以關(guān)鍵字 func 開頭, 并且函數(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 方法雖然沒有接受任何形參, 但它的名字前面卻有一個類似形參的接收者。 每個方法和函數(shù)都可以接受多個形參, 但一個方法必須并且只能有一個接收者。 在 celsius 方法體中, 接收者的行為就跟其他形參一樣。


圖 13-1 方法聲明

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

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ào)用方法的時候, 程序首先需要給出正確類型的變量, 接著是一個點號, 最后才是被調(diào)用方法的名字。

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

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

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

總結(jié)

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

您可能感興趣的文章:
  • GO語言基本類型分析
  • GO語言類型轉(zhuǎn)換和類型斷言實例分析
  • Go語言基礎(chǔ)知識總結(jié)(語法、變量、數(shù)值類型、表達式、控制結(jié)構(gòu)等)
  • GO語言基本數(shù)據(jù)類型總結(jié)
  • Go語言的方法接受者類型用值類型還是指針類型?
  • Go語言中的復(fù)合類型詳細介紹
  • 為什么Go語言把類型聲明放在后面?
  • Go語言基本的語法和內(nèi)置數(shù)據(jù)類型初探

標簽:調(diào)研邀請 慶陽 西雙版納 太原 貴陽 德州 阿克蘇 廣西

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Go語言中如何通過方法為類型添加行為》,本文關(guān)鍵詞  語,言中,如何,通過,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語言中如何通過方法為類型添加行為》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go語言中如何通過方法為類型添加行為的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    霍邱县| 满城县| 习水县| 阿拉善盟| 屏东市| 鄂托克旗| 禄丰县| 松潘县| 乐安县| 大兴区| 耒阳市| 凌源市| 阜城县| 文山县| 英德市| 合山市| 五大连池市| 齐齐哈尔市| 崇信县| 黑山县| 西乌珠穆沁旗| 垣曲县| 青阳县| 西和县| 乡宁县| 洛阳市| 郎溪县| 都江堰市| 泾川县| 澄城县| 蒲江县| 革吉县| 威海市| 灯塔市| 高雄县| 师宗县| 曲沃县| 涡阳县| 信宜市| 山丹县| 兴安盟|