真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言中的接口是什么-創(chuàng)新互聯(lián)

golang 什么是接口?

創(chuàng)新互聯(lián)建站是一家專業(yè)提供馬尾企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為馬尾眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

如果說goroutine和channel是Go并發(fā)的兩大基石,那么接口是Go語言編程中數(shù)據(jù)類型的關(guān)鍵。在Go語言的實(shí)際編程中,幾乎所有的數(shù)據(jù)結(jié)構(gòu)都圍繞接口展開,接口是Go語言中所有數(shù)據(jù)結(jié)構(gòu)的核心。

相關(guān)推薦:golang教程

golang中的接口

1. 接口

概念:接口定義了一組方法,但是不包含這些方法的具體實(shí)現(xiàn);它們是抽象的,接口不能包含變量。

接口的定義格式

type Namer interface {
method1() return_type
method2() return_type
}

2. 一個(gè)接口的栗子

    package main
    import "fmt"
    
    type Message interface {
        Send()
    }
    type user struct {
        name string
        score int
    }
    func (u *user) Send() {
        fmt.Println("hi", u.name, "this is your ", u.score)
    }
    func sendMessage(msg Message) {
        msg.Send()
    }
    func main() {
        u := &user{name: "roty", score: 44}
        sendMessage(&u)
    }

Golang 中的 interface 讓編碼更靈活、易擴(kuò)展,使得 Go 擁有了面向?qū)ο蠖鄳B(tài)的特性。

在此我們記住三點(diǎn)就夠了:

● 方法聲明的集合

● 任何類型的對象實(shí)現(xiàn)了在接口中聲明的全部方法,則表明該類型實(shí)現(xiàn)了對應(yīng)接口。

● 可以作為一種數(shù)據(jù)類型,實(shí)現(xiàn)了該接口的任何對象都可以給對應(yīng)的接口類型變量賦值。

結(jié)合例子去理解上述三點(diǎn):

package main
import "fmt"
import "math"
// 幾何圖形的接口(interface)
type geometry interface {
    area() float64
    perim() float64
}
// rect 和 circle 實(shí)現(xiàn) geometry 接口
type rect struct {
    width, height float64
}
type circle struct {
    radius float64
}
// 實(shí)現(xiàn)了接口中聲明的所有方法即實(shí)現(xiàn)了該接口,這里 rects 實(shí)現(xiàn)了 geometry 接口
func (r rect) area() float64 {
    return r.width * r.height
}
func (r rect) perim() float64 {
    return 2*r.width + 2*r.height
}
// circles 實(shí)現(xiàn) geometry 接口
func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}
// 定義的接口可以作為一種數(shù)據(jù)類型,當(dāng)一個(gè)變量的類型為一個(gè)接口類型時(shí),這個(gè)變量可以調(diào)用接口中定義的方法。
// 這里定義一個(gè)函數(shù),接收一個(gè)類型為 geometry 的參數(shù)變量
func measure(g geometry) {
    fmt.Println(g)
    fmt.Println(g.area())
    fmt.Println(g.perim())
}
func main() {
    r := rect{width: 3, height: 4}
    c := circle{radius: 5}
    // The circle and rect struct types both implement the geometry interface so we can use instances of these structs as arguments to measure.
    // rect 和 circle 結(jié)構(gòu)類型都實(shí)現(xiàn)了 geometry 接口,所以我們能夠把它們的對象作為參數(shù)傳給 measure 函數(shù)
    // 在 measure 函數(shù)內(nèi)部,參數(shù)對象調(diào)用了所屬類型實(shí)現(xiàn)的接口方法。
    measure(r)
    measure(c)
}

一種類型只要實(shí)現(xiàn)接口聲明的方法就算實(shí)現(xiàn)了接口,同樣一種類型能同時(shí)支持實(shí)現(xiàn)多個(gè)接口了,一個(gè)接口也能被多種類型實(shí)現(xiàn)。如果一種類型實(shí)現(xiàn)了某個(gè)接口,那么這種類型的對象能夠賦值給這個(gè)接口類型的變量。

package main
import "fmt"
type I interface {
  method1()
}
type T struct{}
func (T) method1()  {}
func main()  {
  var i I = T{}
  fmt.Println(i)
}

最后的一部分解釋一下 interface{} 類型,這種類型的接口沒有聲明任何一個(gè)方法,俗稱空接口。因?yàn)槿魏晤愋偷膶ο蠖寄J(rèn)實(shí)現(xiàn)了空接口(上文提到任意類型只要實(shí)現(xiàn)了接口的方法就算實(shí)現(xiàn)了對應(yīng)的接口,由于空接口沒有方法,故所有類型默認(rèn)都實(shí)現(xiàn)了空接口)在需要任意類型變量的場景下非常有用。

package main
import (
    "fmt"
)
func PrintAll(vals []interface{}) {
    for _, val := range vals {
        fmt.Println(val)
    }
}
func main() {
    names := []string{"stanley", "david", "oscar"}
    vals := make([]interface{}, len(names))
    for i, v := range names {
        vals[i] = v
    }
    PrintAll(vals)
}
// stanley
// david
// oscar

以上就是golang中什么是接口的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文標(biāo)題:go語言中的接口是什么-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://weahome.cn/article/doijoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部