go語言接口與方法 go 接口作用

go語言 不同的接口含有相同的方法 怎么辦

下面定義一個(gè)結(jié)構(gòu)體類型和該類型的一個(gè)方法:

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的興和網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

復(fù)制代碼代碼如下:

type User struct {

Name string

Email string

}

func (u User) Notify() error

首先我們定義了一個(gè)叫做 User 的結(jié)構(gòu)體類型,然后定義了一個(gè)該類型的方法叫做 Notify,該方法的接受者是一個(gè) User 類型的值。要調(diào)用 Notify 方法我們需要一個(gè) User 類型的值或者指針:

復(fù)制代碼代碼如下:

// User 類型的值可以調(diào)用接受者是值的方法

damon := User{"AriesDevil", "ariesdevil@xxoo.com"}

damon.Notify()

// User 類型的指針同樣可以調(diào)用接受者是值的方法

alimon := User{"A-limon", "alimon@ooxx.com"}

alimon.Notify()

Golang入門到項(xiàng)目實(shí)戰(zhàn) | golang接口

接口像是一個(gè)公司里面的領(lǐng)導(dǎo),他會定義一些通用規(guī)范,只設(shè)計(jì)規(guī)范,而不實(shí)現(xiàn)規(guī)范。

go語言的接口,是一種新的類型定義,它把所有的具有共性的方法定義在一起,任何其他類型只要實(shí)現(xiàn)了這些方法就是實(shí)現(xiàn)了這個(gè)接口。

語法格式和方法非常類似。

在接口定義中定義,若干個(gè)空方法。這些方法都具有通用性。

下面我定義一個(gè)USB接口,有讀read和寫write兩個(gè)方法,再定義一個(gè)電腦Computer和一個(gè)手機(jī)Mobile來實(shí)現(xiàn)這個(gè)接口。

USB接口

Computer結(jié)構(gòu)體

Mobile結(jié)構(gòu)體

Computer實(shí)現(xiàn)USB接口方法

Mobile實(shí)現(xiàn)USB接口方法

測試

運(yùn)行結(jié)果

下面我們定義一個(gè)OpenClose接口,里面有兩個(gè)方法open和close,定義個(gè)Door結(jié)構(gòu)體,實(shí)現(xiàn)其中一個(gè)方法。

【Golang】對使用接口實(shí)現(xiàn)多態(tài)的理解

看【Go語言實(shí)戰(zhàn)】這本書第二遍了,看第一遍的時(shí)候只是留下個(gè)印象,為了加深記憶以及方便回顧,把自己的理解寫出來,僅供參考,Go Go Go,開始

接口是用來定義行為的類型。這些被定義的行為不由接口直接實(shí)現(xiàn),而是通過方法由用戶 定義的類型實(shí)現(xiàn)。如果用戶定義的類型實(shí)現(xiàn)了某個(gè)接口類型聲明的一組方法,那么這個(gè)用戶定 義的類型的值就可以賦給這個(gè)接口類型的值。這個(gè)賦值會把用戶定義的類型的值存入接口類型 的值。

1、如果參數(shù)類型是指針,那么在調(diào)用的時(shí)候也必須傳遞指針地址,因?yàn)榫幾g器不是總能自動獲取一個(gè)值的地址

2、如果參數(shù)類型是值,那調(diào)用的時(shí)候傳值或者指針都可以,因?yàn)橥ㄟ^指針可以獲取到對應(yīng)的值

1、定義一個(gè)接口,接口中定義一個(gè)方法,所有想要實(shí)現(xiàn)該接口的類型,必須先實(shí)現(xiàn)接口中的方法

2、定義一個(gè)類型,并為該類型以接收者方式實(shí)現(xiàn)【步驟1】中的接口方法

3、聲明一個(gè)多態(tài)方法,接收的參數(shù)類型為【步驟1】中定義的接口類型

4、調(diào)用該多態(tài)方法,并把【步驟2】中定義的類型作為參數(shù)傳遞給【步驟3】中聲明的多態(tài)方法,由多態(tài)方法來調(diào)用接口方法

go語言語法(基礎(chǔ)語法篇)

import "workname/packetfolder"

導(dǎo)入多個(gè)包

方法調(diào)用 包名.函數(shù)//不是函數(shù)或結(jié)構(gòu)體所處文件或文件夾名

packagename.Func()

前面加個(gè)點(diǎn)表示省略調(diào)用,那么調(diào)用該模塊里面的函數(shù),可以不用寫模塊名稱了:

當(dāng)導(dǎo)入一個(gè)包時(shí),該包下的文件里所有init()函數(shù)都會被執(zhí)行,然而,有些時(shí)候我們并不需要把整個(gè)包都導(dǎo)入進(jìn)來,僅僅是是希望它執(zhí)行init()函數(shù)而已。下劃線的作用僅僅是為了調(diào)用init()函數(shù),所以無法通過包名來調(diào)用包中的其他函數(shù)

import _ package

變量聲明必須要使用否則會報(bào)錯(cuò)。

全局變量運(yùn)行聲明但不使用。

func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值a 類型a, 返回值b 類型b,...)

func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值類型1, 返回值類型2,...)

func (this *結(jié)構(gòu)體名) 函數(shù)名(參數(shù) string) (返回值類型1, 返回值類型2){}

使用大小來區(qū)分函數(shù)可見性

大寫是public類型

小寫是private類型

func prifunc int{}

func pubfunc int{}

聲明靜態(tài)變量

const value int

定義變量

var value int

聲明一般類型、接口和結(jié)構(gòu)體

聲明函數(shù)

func function () int{}

go里面所有的空值對應(yīng)如下

通道類型

內(nèi)建函數(shù) new 用來分配內(nèi)存,它的第一個(gè)參數(shù)是一個(gè)類型,不是一個(gè)值,它的返回值是一個(gè)指向新分配類型零值的指針

func new(Type) *Type

[這位博主有非常詳細(xì)的分析]

Go 語言支持并發(fā),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。

goroutine 是輕量級線程,goroutine 的調(diào)度是由 Golang 運(yùn)行時(shí)進(jìn)行管理的。

同一個(gè)程序中的所有 goroutine 共享同一個(gè)地址空間。

語法格式如下:

通道(channel)是用來傳遞數(shù)據(jù)的一個(gè)數(shù)據(jù)結(jié)構(gòu)。

通道的聲明

通道可用于兩個(gè) goroutine 之間通過傳遞一個(gè)指定類型的值來同步運(yùn)行和通訊。操作符 - 用于指定通道的方向,發(fā)送或接收。如果未指定方向,則為雙向通道。

[這里有比較詳細(xì)的用例]

go里面的空接口可以指代任何類型(無論是變量還是函數(shù))

聲明空接口

go里面的的強(qiáng)制類型轉(zhuǎn)換語法為:

int(data)

如果是接口類型的強(qiáng)制轉(zhuǎn)成其他類型的語法為:

go里面的強(qiáng)制轉(zhuǎn)換是將值復(fù)制過去,所以在數(shù)據(jù)量的時(shí)候有比較高的運(yùn)行代價(jià)

為什么我不喜歡Go語言式的接口

所謂Go語言式的接口,就是不用顯示聲明類型T實(shí)現(xiàn)了接口I,只要類型T的公開方法完全滿足接口I的要求,就可以把類型T的對象用在需要接口I的地方。這種做法的學(xué)名叫做Structural Typing,有人也把它看作是一種靜態(tài)的Duck Typing。除了Go的接口以外,類似的東西也有比如Scala里的Traits等等。有人覺得這個(gè)特性很好,但我個(gè)人并不喜歡這種做法,所以在這里談?wù)勊娜秉c(diǎn)。當(dāng)然這跟動態(tài)語言靜態(tài)語言的討論類似,不能簡單粗暴的下一個(gè)“好”或“不好”的結(jié)論。

我的觀點(diǎn):

Go的隱式接口Duck Typing確實(shí)不是新技術(shù), 但是在主流靜態(tài)編程語言中支持Duck Typing應(yīng)該是很少的(不清楚目前是否只有Go語言支持).

靜態(tài)類型和動態(tài)類型雖然沒有絕對的好和不好, 但是每個(gè)都是有自己的優(yōu)勢的, 沒有哪一個(gè)可以包辦一切. 而Go是試圖結(jié)合靜態(tài)類型和動態(tài)類型(interface)各自的優(yōu)勢.

那么就從頭談起:什么是接口。其實(shí)通俗的講,接口就是一個(gè)協(xié)議,規(guī)定了一組成員,例如.NET里的ICollection接口:

public interface ICollection {

int Count { get; }

object SyncRoot { get; }

bool IsSynchronized { get; }

void CopyTo(Array array, int index);

}

這就是一個(gè)協(xié)議的全部了嗎?事實(shí)并非如此,其實(shí)接口還規(guī)定了每個(gè)行為的“特征”。打個(gè)比方,這個(gè)接口的Count除了需要返回集合內(nèi)元素的數(shù)目以外,還隱含了它需要在O(1)時(shí)間內(nèi)返回這個(gè)要求。這樣一個(gè)使用了ICollection接口的方法才能放心地使用Count屬性來獲取集合大小,才能在知道這些特征的情況下選用正確的算法來編寫程序,而不用擔(dān)心帶來性能問題,這才能實(shí)現(xiàn)所謂的“面向接口編程”。當(dāng)然這種“特征”并不但指“性能”上的,例如Count還包含了例如“不修改集合內(nèi)容”這種看似十分自然的隱藏要求,這都是ICollection協(xié)議的一部分。

標(biāo)題名稱:go語言接口與方法 go 接口作用
網(wǎng)站鏈接:http://muchs.cn/article40/hjcgeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、全網(wǎng)營銷推廣、企業(yè)建站、外貿(mào)建站、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)