iT邦幫忙

0

Golang-Interface

GitLab:https://gitlab.com/whitefloor40567/golangnote

直接就跳到Interface是太快了...
中間其實還有很多東西需要講,包括設計模式用Interface實驗
不過日後再補上吧XD

萬用型別

Interface在Golang裡的一個使用方法,就是萬用型別
也就是說變數的型態宣告為interface{},將會接收任何形態的變數
下面順便介紹之前switch沒提到的特殊用法

可以值得注意的是在宣告傳入變數時的型態宣告
代表傳入的參數是任何型態都可以接收

package interfacebasic

import "log"

// InterfaceGuide interface可以是任意型態
func InterfaceGuide(ent interface{}) {
	//switch的特殊用法,判斷型態
	switch ent.(type) {
	case int:
		log.Println("this type is int")
	case string:
		log.Println("this type is string")
	}
}

多型

interface還可以拿來撰寫多型
就是說方法是固定的,但是實現對象不一樣,就能根據對象產出不一樣的實作方法

或者有固定的流程方法
例如以下的搜尋系統,會固定需要輸入書籍的ISBN碼與書名

package interfacebasic

import "log"

//interface使用方法
// 1.宣吿interface與實現該interface的方法,以及實現interface方法的傳入值&回傳值
// 2.interface的實現對象是struct,所以需要宣告struct
// 3.以struct實作interface方法
// 4.將struct實例傳入interface內,即可運作

// SearchSystem 宣告interface
type SearchSystem interface {
	EnterISBN(ISBN int)
	EnterBookName(bookname string)
}

// Book 宣告struct
type Book struct {
	BookISBN int
	BookName string
}

//實作interface的方法如下

// EnterISBN .. 輸入ISBN碼
func (b *Book) EnterISBN(ISBNnum int) {
	if b.BookISBN == ISBNnum {
		log.Println("BookISBN is ", b.BookISBN)
	} else {
		log.Println("Enter BookISBN Error")
	}
}

// EnterBookName ... 輸入書名
func (b *Book) EnterBookName(bookname string) {
	if b.BookName == bookname {
		log.Println("BookName is ", b.BookName)
	} else {
		log.Println("Enter BookName Error")
	}
}

// Run ...
func Run(s SearchSystem) {
	ISBN := 40666888
	Bookname := "War"

	s.EnterISBN(ISBN)
	s.EnterBookName(Bookname)
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言