首頁 後端開發 Golang 我如何不再擔心並學會熱愛 Go 介面

我如何不再擔心並學會熱愛 Go 介面

Oct 24, 2024 am 08:19 AM

嘿,Go 新手們(或者我應該說 Gophers-in-training?)! ?
介面似乎是每個人都在談論的神秘而神奇的事物之一,但沒有人真正以有意義的方式進行解釋。 「這就像多態性,但更簡單,」他們說。 「這就像一份合同,」他們聲稱。但每次我嘗試實現一個時,我的代碼都會看著我,“你在做什麼,人類?” ?

但那是那時。現在,介面和我的關係好多了,我來這裡是為了幫助您避免我早期的困惑。所以,如果你一直對 Go 接口摸不著頭腦,那就喝杯咖啡(或茶),讓我們一步一步地分解它——消除頭痛。 ?
那麼,介面到底是什麼?

讓我們從最頂層開始。在 Go 中,介面基本上是一種定義行為的方式,但不會被其工作細節所困擾。想像一下,你是一家工廠的老闆,你並不關心機器是如何運作的;你只在乎它能生產出產品。這就是 Go 介面的樣子:您定義需要發生什麼,但不定義應該如何完成。

例如,假設我們正在與動物一起工作(是的,Go 與動物一起工作,請留在這兒)。你知道每種動物都會發出聲音,但你並不真正在乎它是如何發生的。狗吠,貓喵喵,還有鴨子……嗯,它們嘎嘎叫。你可以像這樣定義一個介面:

type Animal interface {
    Sound() string
}

登入後複製
登入後複製

How I Stopped Worrying and Learned to Love Go Interfaces
這是什麼?只是一個契約,上面寫著:「嘿,任何想要被稱為 Animal 的類型都必須有一個 Sound() 方法。」就是這樣!不涉及任何奇怪的巫術。

給我看程式碼! ???

讓我們舉一個超級簡單的例子,看看它是如何運作的。我們將創造一些動物並讓它們說話。

package main

import "fmt"

// The Animal interface
type Animal interface {
    Sound() string
}

// Define a Dog
type Dog struct{}

func (d Dog) Sound() string {
    return "Woof!"
}

// Define a Cat
type Cat struct{}

func (c Cat) Sound() string {
    return "Meow!"
}

func main() {
    // Our Animal variable can hold any type that satisfies the interface
    var myPet Animal

    // myPet is now a Dog
    myPet = Dog{}
    fmt.Println(myPet.Sound())  // Outputs: Woof!

    // myPet is now a Cat
    myPet = Cat{}
    fmt.Println(myPet.Sound())  // Outputs: Meow!
}

登入後複製
登入後複製

這裡發生了什麼事?

  1. 我們定義了一個 Animal 接口,它有一個方法:Sound() ?.
  2. 然後我們建立兩種類型,Dog 和 Cat,並賦予它們獨特的 Sound() 方法。
  3. 在 main() 函數中,我們建立一個變數 myPet,它可以容納任何滿足 Animal 介面的東西。
  4. 首先,我們分配一隻狗,然後繁榮!我們的狗叫起來:「汪!」?
  5. 然後我們分配一隻貓,你猜怎麼著?它喵喵叫: “喵!” ?

這就是 Go 介面的魔力真正發揮作用的地方 ??:
只要類型具有所需的方法,它就滿足介面。無需明確地說「Dog 實現了 Animal」——Go 足夠聰明,可以自己解決這個問題! ??

為什麼要關心介面?

How I Stopped Worrying and Learned to Love Go Interfaces
讓我跟你說實話。起初,我想,「為什麼還要麻煩這個呢?我可以直接寫我的方法!」但相信我,您會希望盡快了解接口,尤其是當您的程式碼庫開始增長時。

原因如下:

  1. 靈活性:介面讓您的程式碼更加靈活。只要滿足接口,您就可以將一種類型替換為另一種類型。這就像根據某人的技能而不是職位來僱用某人一樣。
  2. 多態性:如果不同類型實現相同的接口,則可以統一對待它們。這就是為什麼介面如此強大的原因——就像擁有一個適用於任何電視的通用遙控器。

  3. 乾淨的程式碼:介面可讓您編寫更乾淨、更模組化的程式碼。您定義行為並讓類型處理自己的實作。

多種方法,沒問題!

讓我們更上一層樓。假設您正在建立一個處理形狀的系統,並且您想要計算圓形和矩形等不同形狀的面積和周長。進入多方法介面!

type Animal interface {
    Sound() string
}

登入後複製
登入後複製

空介面(介面{})

哦,你以為我們就完了? ? ?沒有!讓我們更深入地了解一下空接口,interface{},這是 Go 表達「我可以容納任何類型」的方式。它就像一個免費的盒子,你可以在其中放入任何東西——字串、數字、結構——只要你能想到的。

package main

import "fmt"

// The Animal interface
type Animal interface {
    Sound() string
}

// Define a Dog
type Dog struct{}

func (d Dog) Sound() string {
    return "Woof!"
}

// Define a Cat
type Cat struct{}

func (c Cat) Sound() string {
    return "Meow!"
}

func main() {
    // Our Animal variable can hold any type that satisfies the interface
    var myPet Animal

    // myPet is now a Dog
    myPet = Dog{}
    fmt.Println(myPet.Sound())  // Outputs: Woof!

    // myPet is now a Cat
    myPet = Cat{}
    fmt.Println(myPet.Sound())  // Outputs: Meow!
}

登入後複製
登入後複製

空介面通常用於您事先不知道要處理哪種類型的情況(例如 API 或函式庫)。這就像 Go 版本的通配符。

擁抱介面

學習 Go 介面一開始感覺就像在迷宮中行走,但是一旦掌握了基礎知識,它就會打開一個靈活、可重用且乾淨的程式碼的全新世界。所以不要害怕投入其中!

從簡單開始,玩一些小例子,讓 Go 的介面魔力在你身上成長。不久之後,您將編寫出像技術會議上的瑜珈教練一樣乾淨靈活的程式碼。

地鼠同胞們,編碼愉快!願您的介面簡單,並且您的結構能夠不斷實現。 ?✌️

How I Stopped Worrying and Learned to Love Go Interfaces

以上是我如何不再擔心並學會熱愛 Go 介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1254
29
C# 教程
1228
24
Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang和C:並發與原始速度 Golang和C:並發與原始速度 Apr 21, 2025 am 12:16 AM

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

Golang vs. Python:主要差異和相似之處 Golang vs. Python:主要差異和相似之處 Apr 17, 2025 am 12:15 AM

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

表演競賽:Golang vs.C 表演競賽:Golang vs.C Apr 16, 2025 am 12:07 AM

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

Golang的影響:速度,效率和簡單性 Golang的影響:速度,效率和簡單性 Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C和Golang:表演至關重要時 C和Golang:表演至關重要時 Apr 13, 2025 am 12:11 AM

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang和C:性能的權衡 Golang和C:性能的權衡 Apr 17, 2025 am 12:18 AM

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。

See all articles