Go介面嵌套的使用

来源:https://www.cnblogs.com/phpper/archive/2022/10/29/16839375.html
-Advertisement-
Play Games

原文鏈接:https://www.zhoubotong.site/post/86.html 這裡介紹下介面interface嵌套的用法,大家知道Go語言中不僅僅結構體與結構體之間可以嵌套,介面與介面之間也可以嵌套,通過介面的嵌套我們可以定義出新的介面。 Golang 的介面嵌套,其實也就是一個介面里 ...


原文鏈接:https://www.zhoubotong.site/post/86.html
這裡介紹下介面interface嵌套的用法,大家知道Go語言中不僅僅結構體與結構體之間可以嵌套,介面與介面之間也可以嵌套,通過介面的嵌套我們可以定義出新的介面。

Golang 的介面嵌套,其實也就是一個介面裡面包含一個或多個其他的介面,被包含的介面的所有方法都會被包含到新的介面中。

只有實現介面中所有的方法,包括被包含的介面的方法,才算是實現了介面。

Go語言介面嵌套

語法

type Interface1 interface{
    func1()
}
type Interface2 interface{
    func2()
}
type Interface interface{
    Interface1
    Interface2
    func()
}

說明

上面我們定義了一個介面 Interface1 和一個介面 Interface2,介面 Interface1 裡面由一個方法 func1,介面 Interface12 裡面有一個函數 func2。

接著我們定義了介面 Interface,介面 Interface 裡面包含了介面 Interface1 和介面 Interface2,同時包含了方法 func。

此時介面 Interface 相當於包含了方法 func1、func2 和 func,所以我們必須實現 func1、func2 和 func 這三個方法才算實現了介面 Interface。

例子

介面嵌套

必須實現嵌套的介面的所有方法,才算實現介面

package main

import (
    "fmt"
)

type Studenter struct { // 該Studenter結構體用來演示 如何實現介面的所有的方法
}
type Reader interface {
    ReaderFunc()
}
type Writer interface {
    WriterFunc(str string)
}
type ReadAndWriter interface { // 嵌套結構體
    Reader
    Writer
}

func (s Studenter) ReaderFunc() {
    fmt.Println("調用ReaderFunc")
}
func (s Studenter) WriterFunc(str string) {
    fmt.Println("調用 WriterFunc Str =", str)
}
func main() {
    fmt.Println("草堂筆記(www.zhoubotong.site)")
    // 必須實現嵌套的介面的所有方法,才算實現介面
    var s interface{}              // 定義介面類型變數s
    var student Studenter          // 定義 Studenter 結構體類型的變數 student
    s = student                    // 將 Studenter 賦值給了變數 s
    student.ReaderFunc()           // 調用ReaderFunc方法
    student.WriterFunc("這裡是一段寫函數") // 調用WriterFunc方法
    // 下麵使用 介面類型斷言,分別判斷變數 s 是否是介面 Reader 、Writer 和 ReadAndWriter 類型
    if reader, Ok := s.(Reader); Ok { // s 轉換成Reader 介面
        fmt.Println("Studenter is type of Reader, Reader =", reader)
    }
    if writer, Ok := s.(Writer); Ok { // s 轉換成Writer 介面
        fmt.Println("Studenter is type of Reader, Writer =", writer)
    }
    if readAndWriter, Ok := s.(ReadAndWriter); Ok {
        fmt.Println("Studenter is type of Reader, ReadWriter =", readAndWriter)
    }
}

輸出:

草堂筆記(www.zhoubotong.site)
調用ReaderFunc
調用 WriterFunc Str = 這裡是一段寫函數
Studenter is type of Reader, Reader = {}
Studenter is type of Reader, Writer = {}
Studenter is type of Reader, ReadWriter = {}

上面student同時實現了介面中的Reader和Writer方法,我們發現變數 s 同時是 Reader 、Writer 和 ReadAndWriter 類型,即結構體 Studenter 同時實現了以上三個介面,

其實這個例子就是用一個struct實現一個嵌套介面的方法。

無論從事什麼行業,只要做好兩件事就夠了,一個是你的專業、一個是你的人品,專業決定了你的存在,人品決定了你的人脈,剩下的就是堅持,用善良專業和真誠贏取更多的信任。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ①表級鎖:全局鎖,元數據鎖,意向鎖,AUTO-INC鎖 ②行級鎖:兩階段鎖協議,間隙鎖,臨鍵鎖 ③事務隔離級別,ACID特性 ④死鎖:解決方案 ...
  • 大家好,我是陶朱公Boy. 今天跟大家分享一款基於“生產者消費者模式”下實現的組件。 該組件是作者偶然在翻閱公司一中間件源碼的時候碰到的,覺得設計的非常精美、巧妙,花了點時間整理成文分享給大家。 ...
  • 2022-10-29 一、web中的兩個介面: (1)ServletConfig: 說明:每當有一個servlet對象時,就會有唯一 一個servletConfig配置文件對象 功能:能獲得Servlet名稱(該名稱是web.xml中配置的servlet-name的值),使用方法:如下,可寫在 創建 ...
  • python版本:python 3.9 libpcap版本:1.11.0b7 python libpcap庫是底層綁定c語言libpcap庫的開發包,旨在提供python應用可訪問的unix c libpcap庫API(以及為win32系統提供的Npcap、WinPcap),直接使用底層c代碼,性能 ...
  • 同源策略介紹 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現 請求的url地址,必須與瀏覽器上的url地址處於同域上,也就 ...
  • 2022-10-29 Servlet 1、 Servlet的作用: 例如:查詢數據 (1)瀏覽器端點擊某個查詢功能,向伺服器端發出請求;伺服器端解析請求,創建Servlet對象,並調用特定方法;Servlet對象調用“DAO”方法獲取數據;DAO方法查詢資料庫。 (2)之後將後端的處理數據傳遞給“前 ...
  • 各位好啊,我是會編程的蝸牛,作為java開發者,對於各類java開發技術、開發框架肯定是多少都要瞭解和知道的。 但是作為已經發展了幾十年的java開發生態,各類技術層出不窮,有的新技術新框架已經對舊技術舊框架產生了顛覆性的影響,當然還有一些舊技術壓根就沒流行過。今天我們來看下Java那些可以放棄的技... ...
  • CSS 1.css介紹 css指的是層疊樣式表(cascading style sheets) 官方文檔:https://www.w3school.com.cn/css/index.asp 為什麼需要css? 在沒有css之前,我們想要修改html元素的樣式需要為每個html元素單獨定義樣式屬性,費 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...