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

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

go語(yǔ)言接口實(shí)際類(lèi)型 go 類(lèi)型和接口

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

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

創(chuàng)新互聯(lián)建站是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作與策劃設(shè)計(jì),香洲網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:香洲等地區(qū)。香洲做網(wǎng)站價(jià)格咨詢:13518219792

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

語(yǔ)法格式和方法非常類(lèi)似。

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

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

USB接口

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

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

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

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

測(cè)試

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

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

為什么我不喜歡Go語(yǔ)言式的接口

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

我的觀點(diǎn):

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

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

那么就從頭談起:什么是接口。其實(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屬性來(lái)獲取集合大小,才能在知道這些特征的情況下選用正確的算法來(lái)編寫(xiě)程序,而不用擔(dān)心帶來(lái)性能問(wèn)題,這才能實(shí)現(xiàn)所謂的“面向接口編程”。當(dāng)然這種“特征”并不但指“性能”上的,例如Count還包含了例如“不修改集合內(nèi)容”這種看似十分自然的隱藏要求,這都是ICollection協(xié)議的一部分。

Go語(yǔ)言中怎樣判斷數(shù)據(jù)類(lèi)型

要判斷數(shù)據(jù)類(lèi)型,可以用Go的空接口:

建一個(gè)函數(shù)t 設(shè)置參數(shù)i 的類(lèi)型為空接口,空接口可以接受任何數(shù)據(jù)類(lèi)型

func t(i interface{}) {

//函數(shù)t

有一個(gè)參數(shù)i

switch i.(type) {

//多選語(yǔ)句switch

case string:

//是字符時(shí)做的事情

case int:

//是整數(shù)時(shí)做的事情

}

return

}

i.(type)

只能在switch中使用

這函數(shù)沒(méi)有返回值,你可以自己加入

還可以用反射:

package main

import (

"fmt"

"reflect"

)

func main() {

var x float64 = 3.4

fmt.Println("type:", reflect.TypeOf(x))

}

這樣就可以得出變量x的類(lèi)型信息,與上面不同的是:上面的方法要先知到它是幾個(gè)類(lèi)型中的一個(gè),而這個(gè)方法可以對(duì)任意對(duì)象使用


網(wǎng)站欄目:go語(yǔ)言接口實(shí)際類(lèi)型 go 類(lèi)型和接口
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/hhogdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部