go語言學習筆記九 介面基本使用和最佳實踐

2021-10-04 19:57:42 字數 3369 閱讀 2621

1.基本使用 介面是引用型別

package main

import

"fmt"

// 定義介面

type usb inte***ce

// 定義 3個結構體

type phone struct

type camera struct

type computer struct

// 實現方法

func

(p phone)

start

(a int

)int

func

(p phone)

stop()

func

(c camera)

start

(a int

)int

func

(c camera)

stop()

// 定義使用介面的函式 usb 為實現結構方法的例項

func

(c computer)

working

(usb usb, a int

)(res int

)func

main()

ca := camera

c1 := computer

// usb 為實現usb介面方法的例項

res := c1.

working

(p,20

) fmt.

printf

("3. working返回資料%v\n"

, res)

res2 := c1.

working

(ca,50)

fmt.

printf

("4. working返回資料%v\n"

, res2)

var p2 phone

// 可以定義乙個變數 型別是介面 = 實現介面方法的結構體的例項

var a usb = p2

a.start(88

) a.

stop()

}

輸出
1.phone start 方法:

202.phone stop 方法

3. working返回資料21

1.camera start 方法:

502.camera stop 方法

4. working返回資料51

1.phone start 方法:

882.phone stop 方法

2 最佳實踐
package main

import

("fmt"

"math/rand"

"sort"

)// 定義學生結構體

type student struct

// 定義學生結構體的切片

type studentslice [

]student

// studentslice 實現內建排序介面 sort.sort 的方法

//len() int; less(i, j int) bool; swap(i, j int); swap(i, j int)

func

(stu studentslice)

len(

)int

func

(stu studentslice)

less

(i, j int

)bool

func

(stu studentslice)

swap

(i, j int

)func

main()

studentslice =

(studentslice, stu)

} fmt.

printf

("--------學生資訊--------\n"

)for index, stu :=

range studentslice

fmt.

printf

("--------根據分數排序後學生資訊--------\n"

) sort.

sort

(studentslice)

for index, stu :=

range studentslice

}

輸出
--

----

--學生資訊--

----

--0.name:名字81

0.age:

870.score:

471.name:名字59

1.age:

811.score:

182.name:名字25

2.age:

402.score:

563.name:名字0

3.age:

943.score:

114.name:名字62

4.age:

894.score:

285.name:名字74

5.age:

115.score:

456.name:名字37

6.age:

66.score:

957.name:名字66

7.age:

287.score:

588.name:名字47

8.age:

478.score:

879.name:名字88

9.age:

909.score:

15--

----

--根據分數排序後學生資訊--

----

--0.name:名字0

0.age:

940.score:

111.name:名字88

1.age:

901.score:

152.name:名字59

2.age:

812.score:

183.name:名字62

3.age:

893.score:

284.name:名字74

4.age:

114.score:

455.name:名字81

5.age:

875.score:

476.name:名字25

6.age:

406.score:

567.name:名字66

7.age:

287.score:

588.name:名字47

8.age:

478.score:

879.name:名字37

9.age:

69.score:

95

Go語言學習筆記(七)介面

go語言中的介面作用類似於c 中的虛函式機制,可以提供乙個統一呼叫的方式。介面是雙方約定的一種合作協議。介面實現者不需要關心介面會被怎樣使用,呼叫者也不需要關心介面的實現細節。介面是一種型別,也是一種抽象結構,不會暴露所包含資料的格式 型別及結構。每個介面型別由多個方法組成。type 介面型別名 i...

7 1 介面摘自《go語言學習筆記》

1,介面實現機制 只要目標方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告。目標型別可以實現多個介面。2,內部實現,介面自身也是一種結構型別 type iface struct不能有欄位 不能定義自己的方法。只能宣告方法,不能實現。可嵌入其它介面型別。3,介面通常以er作為介面字...

Go語言學習筆記 PART9 介面

go語言不是傳統的物件導向程式設計語言,沒有類和繼承的概念,但是有非常靈活的介面,可以實現物件導向的特徵,介面提供一種方式來說明物件的行為 type namer inte ce 複製 1.定義乙個介面 type shaper inte ce type square struct 2.square型別...