golang中的接口

1.簡介

  1. 在go中的接口是以一種類型,一種抽象的類型。接口(interface)是一組函數method的集合,go中的接口不能包含任何變量。
  2. 在go中接口中的所有方法都沒有方法體,接口定義了一個對象的行為規范,只定義規范不實現。接口體現了程序的多態和高內聚低耦合的思想。
  3. go中的接口也是一種數據類型,不需要顯示實現,只需要一個變量含有接口類型中的所有方法,那么這個變量就實現了這個接口。

2.接口的定義 

interface類型可以定義一組方法,但是這些不需要實現。并且interface不能包含任何變量。到某個自定義類型要使用的時候,再根據具體情況把這些方法寫出來(實現)。

type 接口名 interface {

method1(參數...)返回值列表

method2(參數...)返回值列表

}

實現:

func (t 自定義類型) method1(參數...)返回值列表{

//方法體

}

func (t 自定義類型) method2(參數...)返回值列表{

//方法體

}

其中:

  • 接口名:使用type將接口定義為自定義類型名,go語言的接口在命名時,一般會在單詞后面添加er,如有寫操作的接口writer,有字符串功能的接口叫Stringer等。接口名最好能突出該接口的類型含義。
  • method:當方法名首字母是大寫且這個接口名首字母也是大寫,這個方法可以被接口所在的包(package)之外的代碼訪問。
  • 參數和返回值列表:參數和返回值列表中的參數名可以省略。

3.快速入門

定義一個Usber接口讓Phone和Camera結構體實現這個接口。

package mainimport "fmt"// 定義一個接口
type Usber interface {//聲明了兩個沒有實現的方法start()stop()
}type Phone struct {
}// 手機要實現usb接口的化必須得實現usb接口中的所有方法
func (p Phone) start() {fmt.Println("手機開始工作了")
}
func (p Phone) stop() {fmt.Println("手機停止工作了")
}type Camera struct {
}// 照相機要實現usb接口的化必須得實現usb接口中的所有方法func (p Camera) start() {fmt.Println("照相機開始工作了")
}
func (p Camera) stop() {fmt.Println("照相機停止工作了")
}type Computer struct {
}// 編寫一個方法Working,接口一個Usber接口類型的變量
// 只要實現了Usber接口,
func (c Computer) Working(usb Usber) {//通過usb接口變量來調用start和stop方法usb.start()usb.stop(

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI 浪潮下,職場的變與不變

如今,AI 如迅猛颶風,極速席卷職場,徹底攪亂了原有的秩序。你是否留意到,身邊的工作方式正悄然生變?今天,【探星 AI 研習社】就為大家深入剖析,AI 如何改寫職場劇本。無論你是大學生還是職場資深…

匯川EASY系列之以太網通訊(MODBUS_TCP做主站)

匯川Easy系列以太網通訊中(MODBUSTCP,plc做主站),終于可以不用使用指令就可以完成了,全程通過簡單的配置就可通訊。本文將通過EASY系列PLC與調試助手之間完成此操作。具體演示如下; 關于主站和從站的介紹 A/請求:即主動方 向被動方發送的一個要求的信息。 B/主站:發…

npm error gyp info

在使用 npm 安裝 Node.js 包時,可能會遇到各種錯誤,其中 gyp 錯誤是比較常見的一種。gyp 是 Node.js 的一個工具,用于編譯 C 代碼。這些錯誤通常發生在需要編譯原生模塊的 npm 包時。下面是一些常見的原因和解決方法: 常見原因及…

Oracle 19C分區表索引小結

一、大佬說(楊廷琨) LOCAL索引的最大好處是在進行分區操作,比如TRUNCATE PARTITION, DROP PARTITION時,不會出現索引INVALID的情況,不影響索引的可用性。由于GLOBAL索引所有的數據存儲在一起,因此當執行分…

AutoHub場景演示|帶您領略智能自動化操作的全新體驗

AutoHub是一款由OpenCSG推出的基于前沿大型語言模型(LLM)的瀏覽器自動化工具,旨在通過智能對話交互和自動化技術,幫助用戶更高效地瀏覽網頁和完成任務。它不僅能夠自動化繁瑣的網頁操作,還能夠為用戶提供精準的信息檢索…

深入解析 Linux 聲卡驅動:從架構到實戰

在嵌入式 Linux 設備中,音頻功能的實現離不開 Linux 聲卡驅動。而 ALSA (Advanced Linux Sound Architecture) 作為 Linux 內核的音頻框架,提供了一整套 API 和驅動模型,幫助開發者快速集成音頻功能。本篇文章以 WM8960 音頻編解碼器&#xf…

thinkphp5模型查詢數據庫,查出來的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查詢數據庫時將返回的字段名直接修改為其他名稱,可以通過以下幾種方式實現: 方法1:使用 field 方法指定字段別名 在查詢時通過 field 方法直接為字段指定別名(使用 AS 關鍵字)。 示例代碼: // 使用Db類查詢 $result = Db::name(user)->…

關于前端指令

在前端開發中,指令(Directives)通常指在框架中使用的一種特殊的語法或機制,用于擴展 HTML 的功能。常見的指令主要存在于前端框架中,如 Vue.js、Angular 等。下面我們將分別介紹 Vue.js 和 Angular 中的常用指令&#…

虛擬地址空間(下)進程地址空間(上)

一.關于頁表組成 1.權限(rwx) 作用:如1.讓代碼區變成只讀的 2.寫時拷貝的實現:子進程創建時其頁表指向的父進程代碼和數據權限都是只讀的,子進程試圖修改,觸發錯誤,系統開始寫時拷貝。 來源:…

【區塊鏈 + 航運物流】豐溯 - 區塊鏈溯源平臺 | FISCO BCOS 應用案例

豐溯是順豐科技推出的區塊鏈溯源平臺, 采用 FISCO BCOS 底層開源框架, 為農副食品、 冷鏈生鮮等企業客戶及消費 者提供關鍵流通節點的溯源信息服務,形成從源頭到消費者端全鏈路透明的信息鏈。 在商貿消費領域, 溯源一直是保障產品…

iwebsec-SQL數字型注入

1.判斷是否存在漏洞 添加and 11發現正常顯示,添加and 12無回顯條目,則存在sql注入漏洞 2.因為有回顯,嘗試union聯合注入,使用order by判斷出有3個字段 3.使用union聯合注入查看回顯位,發現3三個字段均有回顯&#xff…

藍橋杯每日五題第一日

藍橋杯每日5題 問題一 班級活動 1.班級活動 - 藍橋云課 問題描述 小明的老師準備組織一次班級活動。班上一共有 nn 名 (nn 為偶數) 同學,老師想把所有的同學進行分組,每兩名同學一組。為了公平,老師給每名同學隨機分配了一個 nn 以內的正…

STM32 —— 嵌入式系統、通用計算機系統、物聯網三層架構

目錄 一、嵌入式系統的概念 二、通用計算機系統與嵌入式系統的比較 用途 硬件 軟件 性能與功耗 開發與維護 三、嵌入式系統與物聯網的關系 四、物聯網的三層架構 1. 感知層(Perception Layer) 2. 網絡層(Network Layer) …

卡碼網25題——掌握ACM輸入輸出方式(15 至 18)

刷題小記: 本期涉及ACM模式下棧和鏈表的構建與使用,值得學習。 卡瑪網15.神秘字符(卡瑪網15.神秘字符) 題目分析: 若給定2行字符串,其中第一個串的長度為偶數,現要求把第二個串插入到第一個…

前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” !!!

🚀 前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” 🌟 嘿,技術冒險家們!👋 今天我們要聊一個開發中常見的“坑”:前端傳來的 JSON 參數字段名和后端對象字段名不一致,會發生…

python中使用單例模式在整個程序中只創建一個數據庫連接,節省資源

示例代碼: from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

AI小白的第六天:必要的數學知識(一)

在學習的過程中,不管是上代碼還是理論學習,其中都摻雜了一些數學知識。俗話說“磨刀不誤砍柴工”,而我已經“誤了砍柴功”了,現在變成了“亡羊補牢,為時不晚”。 線性代數 線性代數是數學的一個分支,主要…

【Linux】Bash是什么?怎么使用?

李升偉 整理 什么是 Bash? Bash(Bourne Again Shell)是一種 命令行解釋器(Shell),廣泛用于 Unix 和 Linux 操作系統。它是 Bourne Shell(sh) 的增強版,提供了更多的功能…

Qt Creator入門

1.創建項目 選擇創建項目-Application(Qt)-Qt Widgets Application-修改名稱即可 默認創建有窗口類,myWidget,基類有三種選擇:QWidget,QMainWindow,QDialog 注意: 名稱和創建路徑不能有中文、…

C語言經典代碼練習題

1.輸入一個4位數&#xff1a;輸出這個輸的個位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("輸入一個&#xff14;位數&#xff1a;");scanf("%d",&a);printf("個位&#xff1a;%d\n"…