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

Go 通過結構struct實現(xiàn)接口interface的問題

 更新時間:2021年10月04日 10:03:37   作者:踏雪無痕SS  
這篇文章主要介紹了Go 通過結構struct實現(xiàn)接口interface的問題,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、通過結構(struct) 實現(xiàn) 接口(interface)

1、在了解iris框架的時候,經常看到有這樣去寫的使用一個空結構體作為接收器,來調用方法,有點好奇這樣做有什么意義。

解釋:在 Go 語言中,一個 struct 實現(xiàn)了某個接口里的所有方法,就叫做這個 struct 實現(xiàn)了該接口。

2、空結構體有以下幾大特點

A、不占用內存地址。

B、地址不變

3、首先我們知道interface定義的是抽象方法,而下面的func是它的具體實現(xiàn)(這個和java差不多的意思),但是我們知道,在java中interface是沒有辦法實例化,因為他是抽象的。那么這個操作的作用是:首先NewEntraceRepository這個方法返回了一個空結構體的指針(該空結構體必須實現(xiàn)了當前interface),然后我們只要使用NewEntraceRepository創(chuàng)建的變量就可以直接調用當前interface的方法。

func NewEntraceRepository()EntraceRepository {
    return &entraceRepository{};
}

上面這段代碼相當于下面

var variable_value  EntraceRepository=&entraceRepository{} 

疑問:為什么可以將這個空結構體賦值給interface,我們知道只有結構體實現(xiàn)了interface的所有方法才能這樣進行賦值。

func (n bookRepository) GetBookList(m map[string]interface{})(total int,books []models.Book){}

其實一個 struct 實現(xiàn)了某個接口里的所有方法,就叫做這個 struct 實現(xiàn)了該接口。所以使用一個變量接收這個地址是可以直接調用的。

下面寫一個 Demo 實現(xiàn)一下,先寫一個 Study interface{},里面需要實現(xiàn) 4 個方法 Listen、Speak、Read、Write,然后再寫一個 study struct{},去全部實現(xiàn)里面的方法,然后分享一下代碼心得。

二、代碼示例

//Go - 結構(struct) 實現(xiàn) 接口(interface)
 
package main
 
import (
    "fmt"
 
    "github.com/pkg/errors"
)
 
var _ Study = (*study)(nil)
 
type Study interface {
    Listen(msg string) string
    Speak(msg string) string
    Read(msg string) string
    Write(msg string) string
}
 
type study struct {
    Name string
}
 
func (s *study) Listen(msg string) string {
    return s.Name + " 聽 " + msg
}
 
func (s *study) Speak(msg string) string {
    return s.Name + " 說 " + msg
}
 
func (s *study) Read(msg string) string {
    return s.Name + " 讀 " + msg
}
 
func (s *study) Write(msg string) string {
    return s.Name + " 寫 " + msg
}
 
func New(name string) (Study, error) {
    if name == "" {
        return nil, errors.New("name required")
    }
 
    return &study{
        Name: name,
    }, nil
}
 
func main() {
    name := "Xiao Ming "
    s, err := New(name)
    if err != nil {
        fmt.Println(err)
    }
 
    fmt.Println(s.Listen("english"))
    fmt.Println(s.Speak("english"))
    fmt.Println(s.Read("english"))
    fmt.Println(s.Write("english"))
}

到此這篇關于Go 通過結構(struct) 實現(xiàn)接口(interface)的文章就介紹到這了,更多相關Go 結構實現(xiàn)接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入理解Go設計模式之代理模式

    深入理解Go設計模式之代理模式

    代理模式是一種結構型設計模式,?其中代理控制著對于原對象的訪問,?并允許在將請求提交給原對象的前后進行一些處理,從而增強原對象的邏輯處理,這篇文章主要來學習一下代理模式的構成和用法,需要的朋友可以參考下
    2023-05-05
  • golang使用mapstructure解析json

    golang使用mapstructure解析json

    mapstructure?是一個?Go?庫,用于將通用映射值解碼為結構,這篇文章主要來和大家介紹一下golang如何使用mapstructure解析json,需要的可以參考下
    2023-12-12
  • golang規(guī)則引擎gengine用法案例

    golang規(guī)則引擎gengine用法案例

    這篇文章主要為大家介紹了golang?規(guī)則引擎gengine用法案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言interface 與 nil 的比較

    Go語言interface 與 nil 的比較

    在golang中,nil只能賦值給指針、channel、func、interface、map或slice類型的變量。如果未遵循這個規(guī)則,則會引發(fā)panic。
    2017-08-08
  • Go語言中的通道channel詳情

    Go語言中的通道channel詳情

    這篇文章主要介紹了Go語言中的通道channel,在Go語言中管道類似于一個數(shù)據(jù)流,每次放入或者取出一部分數(shù)據(jù),數(shù)據(jù)取出后原通道內的數(shù)據(jù)就刪除掉,在linux操作系統(tǒng)中管道會將函數(shù)的返回結果作為下一個函數(shù)的參數(shù),下文詳細內容需要的朋友可以參考下
    2022-02-02
  • Go語言實現(xiàn)猜數(shù)字小游戲

    Go語言實現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了Go語言實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于Go語言構建RESTful API服務

    基于Go語言構建RESTful API服務

    在實際開發(fā)項目中,你編寫的服務可以被其他服務使用,這樣就組成了微服務的架構;也可以被前端調用,這樣就可以前后端分離。那么,本文主要介紹什么是 RESTful API,以及 Go 語言是如何玩轉 RESTful API 的
    2021-07-07
  • ?Go?語言實現(xiàn)?HTTP?文件上傳和下載

    ?Go?語言實現(xiàn)?HTTP?文件上傳和下載

    這篇文章主要介紹了Go語言實現(xiàn)HTTP文件上傳和下載,文章圍繞主題展開詳細的內容戒殺,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Go數(shù)據(jù)結構之HeapMap實現(xiàn)指定Key刪除堆

    Go數(shù)據(jù)結構之HeapMap實現(xiàn)指定Key刪除堆

    這篇文章主要給大家介紹了Go語言數(shù)據(jù)結構之HeapMap實現(xiàn)指定Key刪除堆,通過使用Go語言中的container/heap包,我們可以輕松地實現(xiàn)一個優(yōu)先級隊列,文中有詳細的代碼示例講解,需要的朋友可以參考下
    2023-07-07
  • go gin中間件關于 c.next()、c.abort()和return的使用小結

    go gin中間件關于 c.next()、c.abort()和return的使用小結

    中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當前中間件,后續(xù)中間件和處理器的處理流程,?這篇文章給大家介紹go gin中間件關于 c.next()、c.abort()和return的使用小結,感興趣的朋友跟隨小編一起看看吧
    2024-03-03

最新評論