久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 語言中的接口

在所有編程語言中,接口都是一些方法的集合,通常都是"類"們都需要實現的一些公共方法。使這些"類"在使用過程中多了一層抽象。在使用接口時無需在意這些方法是如何實現的,只需在意這個接口中的方法本身。Go 語言提倡面向接口編程,一來增強代碼的可讀性,二來可以使代碼的模塊之間的關系變得更加清晰、邊界更加明顯。本文就來介紹一下 Go 語言中的接口。

 

1. 接口定義

在 Go 語言中,接口也是一個數據類型,該類型使用結構?interface{...}?來定義。

代碼示例:

代碼塊
  • 1? var stuInterface interface{
  • 2? ? ? ? PrintAge()
  • 3? }

以上代碼定義可一個接口類型的變量,其中包含的方法為 PrintAge()。

 

2. 接口實現

了解了 Go 語言中接口的定義之后,我們來學習一下如何實現Go語言的接口。

在 Go 語言的接口中有兩個非常重要的特性:

  • 只要有類實現(模擬)了接口中包含的所有方法,我們就稱這個類型實現了這個接口
  • 只要是實現了這個接口的類型,用這個類型定義的變量就可以給這個接口聲明的變量賦值

所以從以上兩個特性也可以推出?interface{}?類型的變量,可以接收?任何變量的賦值。這兩個特性也被稱為鴨子類型,即"走起來像鴨子,叫起來像鴨子(類型模擬了接口中包含的所有方法),那么它就是一只鴨子"。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? ? "fmt"
  • 5? )
  • 6
  • 7? var stuInterface interface {
  • 8? ? ? ? ? ? PrintAge()
  • 9? }
  • 10
  • 11? type Student struct {
  • 12? ? ? ? ? Name string
  • 13? ? ? ? ? Age int
  • 14? }
  • 15
  • 16? func (s Student) PrintAge() {
  • 17? ? ? ? ? fmt.Println(s.Age)
  • 18? }
  • 19
  • 20? func main() {
  • 21? ? ? ? ? stuInterface = Student{
  • 22? ? ? ? ? ? ? ? ? ? Name: "Codey",
  • 23? ? ? ? ? ? ? ? ? ? Age: 18,
  • 24? ? ? ? ? }
  • 25? ? ? ? ? stuInterface.PrintAge()
  • 26? }
  • 第 21~24 行:定義了一個自定義類型,并且這個類型實現了接口變量類型中的方法;
  • 第 21 行:實例化一個自定義類型的變量,并賦值給這個接口變量;
  • 第 25 行:使用接口中的方法。會發現打印了學生的年齡。

執行結果:

圖片描述

 

3. 自定義接口類型

為了方便使用,一般都會使用自定義類型來定義一個接口類型。同時還可以寫一個函數來實例化接口。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? ? "fmt"
  • 5? )
  • 6
  • 7? type StudentInterface interface {
  • 8? ? ? ? ? ? PrintAge()
  • 9? }
  • 10
  • 11? type Student struct {
  • 12? ? ? ? ? Name string
  • 13? ? ? ? ? Age int
  • 14? }
  • 15
  • 16? func (s Student) PrintAge() {
  • 17? ? ? ? ? fmt.Println(s.Age)
  • 18? }
  • 19
  • 20? func newStudent(name string, age int) StudentInterface {
  • 21? ? ? ? ? return Student{Name: name, Age: age}
  • 22? }
  • 23? func main() {
  • 24? ? ? ? ? stuInterface := newStudent("Codey", 18)
  • 25
  • 26? ? ? ? ? stuInterface.PrintAge()
  • 27? }
  • 第 20~22 行:定義一個函數來實例化接口;
  • 第 24 行:初始化一個接口變量。

執行結果:

圖片描述

 

4. 小結

本文主要介紹了 Go 語言中接口的定義和使用。需要注意以下幾點:

  • 在 Go 語言中接口是一個類型;
  • 一般使用自定義類型來定義接口;
  • Go 語言的接口是鴨子類型

文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 天镇县| 潮安县| 福州市| 丰镇市| 新昌县| 惠水县| 高唐县| 都匀市| 昌平区| 巴彦县| 和田市| 咸阳市| 宁明县| 克什克腾旗| 炉霍县| 常熟市| 广州市| 辽中县| 久治县| 池州市| 桐柏县| 桃江县| 丹巴县| 兴山县| 嘉禾县| 铜鼓县| 安阳市| 射洪县| 建湖县| 师宗县| 通许县| 长泰县| 托克逊县| 疏附县| 灌阳县| 辽阳县| 宁海县| 东山县| 霍州市| 二连浩特市| 井陉县|