第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Go 入門教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

32 Go 語(yǔ)言中的接口

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

1. 接口定義

在 Go 語(yǔ)言中,接口也是一個(gè)數(shù)據(jù)類型,該類型使用結(jié)構(gòu) interface{...} 來(lái)定義。

代碼示例:

var stuInterface interface{
    PrintAge()
}

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

2. 接口實(shí)現(xiàn)

了解了 Go 語(yǔ)言中接口的定義之后,我們來(lái)學(xué)習(xí)一下如何實(shí)現(xiàn)Go語(yǔ)言的接口。

在 Go 語(yǔ)言的接口中有兩個(gè)非常重要的特性:

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

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

代碼示例:

package main

import (
    "fmt"
)

var stuInterface interface {
    PrintAge()
}

type Student struct {
    Name string
    Age  int
}

func (s Student) PrintAge() {
    fmt.Println(s.Age)
}

func main() {
    stuInterface = Student{
        Name: "Codey",
        Age:  18,
    }
    stuInterface.PrintAge()
}
  • 第 21~24 行:定義了一個(gè)自定義類型,并且這個(gè)類型實(shí)現(xiàn)了接口變量類型中的方法;
  • 第 21 行:實(shí)例化一個(gè)自定義類型的變量,并賦值給這個(gè)接口變量;
  • 第 25 行:使用接口中的方法。會(huì)發(fā)現(xiàn)打印了學(xué)生的年齡。

執(zhí)行結(jié)果:

圖片描述

3. 自定義接口類型

為了方便使用,一般都會(huì)使用自定義類型來(lái)定義一個(gè)接口類型。同時(shí)還可以寫一個(gè)函數(shù)來(lái)實(shí)例化接口。

代碼示例:

package main

import (
    "fmt"
)

type StudentInterface interface {
    PrintAge()
}

type Student struct {
    Name string
    Age  int
}

func (s Student) PrintAge() {
    fmt.Println(s.Age)
}

func newStudent(name string, age int) StudentInterface {
    return Student{Name: name, Age: age}
}
func main() {
    stuInterface := newStudent("Codey", 18)

    stuInterface.PrintAge()
}
  • 第 20~22 行:定義一個(gè)函數(shù)來(lái)實(shí)例化接口;
  • 第 24 行:初始化一個(gè)接口變量。

執(zhí)行結(jié)果:

圖片描述

4. 小結(jié)

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

  • 在 Go 語(yǔ)言中接口是一個(gè)類型;
  • 一般使用自定義類型來(lái)定義接口;
  • Go 語(yǔ)言的接口是鴨子類型。