欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

type kelvin float64

kelvin 類型跟它的底層類型 float64 具有相同的行為, 我們可以像處理浮點數(shù)那樣, 對 kelvin 類型的值執(zhí)行加法運算、乘法運算以及其他操作。 此外, 聲明一個將 kelvin 轉(zhuǎn)換為 celsius 的方法就跟聲明一個具有同等作用的函數(shù)一樣簡單——它們都以關鍵字 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) }

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

總結

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

相關文章

  • 詳解Go語言中select語句的常見用法

    詳解Go語言中select語句的常見用法

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

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

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

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

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

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

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

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

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

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

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

    Go開發(fā)Gin項目添加jwt功能實例詳解

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

    GO項目部署Linux服務器的實現(xiàn)示例

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

    Go異步任務解決方案之Asynq庫詳解

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

    go結構體嵌套的切片數(shù)組操作

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

最新評論