GitLab:https://gitlab.com/whitefloor40567/golangnote
直接就跳到Interface是太快了...
中间其实还有很多东西需要讲,包括设计模式用Interface实验
不过日后再补上吧XD
万用型别
Interface在Golang里的一个使用方法,就是万用型别
也就是说变数的型态宣告为interface{},将会接收任何形态的变数
下面顺便介绍之前switch没提到的特殊用法
可以值得注意的是在宣告传入变数时的型态宣告
代表传入的参数是任何型态都可以接收
package interfacebasicimport "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 interfacebasicimport "log"//interface使用方法// 1.宣吿interface与实现该interface的方法,以及实现interface方法的传入值&回传值// 2.interface的实现对象是struct,所以需要宣告struct// 3.以struct实作interface方法// 4.将struct实例传入interface内,即可运作// SearchSystem 宣告interfacetype SearchSystem interface {EnterISBN(ISBN int)EnterBookName(bookname string)}// Book 宣告structtype Book struct {BookISBN intBookName 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 := 40666888Bookname := "War"s.EnterISBN(ISBN)s.EnterBookName(Bookname)}