golang學習之結構體,方法,接口

1.結構體
在golang裏,沒有類的概念,但是如果非要實現像類那樣的例子,那或許就是結構體了,結構體是一系列變量的集合,
定義

type s_name struct {
	v_name1 v_type1
	v_name2 v_type2
}

聲明結構體類型的變量

var name = s_name{v_value1, v_value2}   
//或者
var name = s_name{v_name1: v_value1, v_name2: v_value2}

可是這跟類比,還少類方法啊,的確,不過golang也能給結構體加上方法。

2.方法
golang裏,方法就是帶有接收者的函數,何爲接收者,即是任意類型(結構體,指針,接口等)的實例。函數跟類型綁定,即成了方法
定義

type Person struct {
	name string
	age int
}

//此處Person類型的person是sayHello方法的接收者,以後person可以調用此方法。
func (person Person) sayHello {
	fmt.Println("hello,goodmorning")
}  

person.sayHello()  
//結構體在定義的時候,並沒有定義方法,但是通過上面的操作,就好像是該方法是結構體自己定義的一樣。有點反客爲主的意思。

在這裏插入圖片描述

把圖內文字換一下就是
方法:你有方法嘛?結構體
結構體:沒有
func (s Struct) Func {}
方法:那從現在起,你已經有了

當然方法不只是能綁定在結構體上,還能有很多類型。

3.接口
duck typing:假如,我認爲黃色的,長的像鴨子的動物都算是鴨子,那麼以後,只要是黃色的,長的像鴨子的東西,無論有沒有生命,大小如何,他在我的範疇裏都是鴨子。
duck typing 描述事物的外部行爲而非內部結構,爲多態的一種形式。是從使用者的角度來看的。如果我認爲長得像鴨子的東西是鴨子,那麼任何長的像鴨子的事物在我眼中就是鴨子

接口是一組方法簽名的集合,體現的是泛型的思想。
接口是隱式實現的,只要實現了接口裏的方法,就相當於實現了接口,即只要長的像鴨子,那麼就是鴨子。

type if_name interface{
	method1()
	method2()
}

type S1 struct {}

func (s1 S1) method1() {}
func (s1 S1) method2() {}

s1實現了method1(),method2()方法,那麼也就意味着S1實現了if_name這個接口,那麼以後if_name就可以視爲S1類型,反之亦然,如果多個類型都實現了兩個方法,那麼多個類型都可視爲if_name類型,那麼if_name就可以當做很多類型使用,這也許能稱之爲泛型吧。那麼定義這樣一個接口類型的數組,即可以裝下各種實現了接口所有方法 的不同類型了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章