成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言接口實際類型 go語言接口的意義

Go語言中怎樣判斷數據類型

要判斷數據類型,可以用Go的空接口:

成都網絡公司-成都網站建設公司成都創(chuàng)新互聯10年經驗成就非凡,專業(yè)從事成都網站建設、成都網站設計,成都網頁設計,成都網頁制作,軟文發(fā)布平臺廣告投放平臺等。10年來已成功提供全面的成都網站建設方案,打造行業(yè)特色的成都網站建設案例,建站熱線:028-86922220,我們期待您的來電!

建一個函數t 設置參數i 的類型為空接口,空接口可以接受任何數據類型

func t(i interface{}) {

//函數t

有一個參數i

switch i.(type) {

//多選語句switch

case string:

//是字符時做的事情

case int:

//是整數時做的事情

}

return

}

i.(type)

只能在switch中使用

這函數沒有返回值,你可以自己加入

還可以用反射:

package main

import (

"fmt"

"reflect"

)

func main() {

var x float64 = 3.4

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

}

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

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

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

我的觀點:

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

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

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

public interface ICollection {

int Count { get; }

object SyncRoot { get; }

bool IsSynchronized { get; }

void CopyTo(Array array, int index);

}

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

golang原生數據類型

golang原生數據類型:按長度:int8(-128-127)、int16、int32、int64。

布爾型:布爾型的值只可以是常量true或者false。一個簡單的例子:varbbool=true。

數字類型:整型int和浮點型float32、float64,Go語言支持整型和浮點型數字,并且支持復數,其中位的運算采用補碼。

字符串類型:字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼標識Unicode文本。

派生類型:包括:(a)指針類型(Pointer)(b)數組類型?結構化類型(struct)(d)Channel類型(e)函數類型(f)切片類型(g)接口類型(interface)(h)Map類型。

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

接口像是一個公司里面的領導,他會定義一些通用規(guī)范,只設計規(guī)范,而不實現規(guī)范。

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

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

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

下面我定義一個USB接口,有讀read和寫write兩個方法,再定義一個電腦Computer和一個手機Mobile來實現這個接口。

USB接口

Computer結構體

Mobile結構體

Computer實現USB接口方法

Mobile實現USB接口方法

測試

運行結果

下面我們定義一個OpenClose接口,里面有兩個方法open和close,定義個Door結構體,實現其中一個方法。

網頁標題:go語言接口實際類型 go語言接口的意義
轉載注明:http://jinyejixie.com/article2/hpcioc.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站設計公司、、定制網站App設計、用戶體驗、微信公眾號

廣告

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

成都網站建設
元阳县| 德安县| 腾冲县| 铜梁县| 罗山县| 卢湾区| 万州区| 湟中县| 阿鲁科尔沁旗| 加查县| 商洛市| 仁布县| 合山市| 合山市| 寻乌县| 区。| 竹北市| 德钦县| 厦门市| 玉树县| 延津县| 合水县| 松阳县| 岳池县| 手游| 福泉市| 承德市| 哈尔滨市| 大名县| 溆浦县| 布拖县| 昆明市| 西安市| 和静县| 砚山县| 康马县| 武宣县| 宁津县| 安福县| 鸡东县| 东乡县|