二、方法
三、介面
示例:go 語言中沒有「類」的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與「類」都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。
在定義時:結構體中的字段型別可以是任何型別(包括函式型別與介面型別,結構體型別),也可以不給字段命名
type identifier struct
eg:學生結構體
type student struct
s1 :=
new(student)
//使用new函式建立乙個指向結構體型別的指標,建立過程中自動為結構體分配記憶體
s2 := student
//給學生結構體賦初值,注意賦值順序與欄位名字和型別一致
s3 :=
&student
在go語言中結構體除了欄位的名稱和型別外還有乙個可選的標籤tag,標記的tag只有reflect包可以訪問到,一般用於orm或者json的資料傳遞,下面這段**演示了如何為結構體打標籤。
type student struct
我們可以使用go自帶的json包將宣告的結構體變數轉變為json字串。
func
tojson
(s *student)
(string
,error
)return
string
(bytes)
,nil
}
即結構體中再巢狀結構體
)}接收者分為兩種型別:值接收者和指標接收者
值接收者:不改變原來的變數的值
指標接收者:
func
(p *person)
setname
(name string
)
介面為一種規範,它需要做的是誰想要實現我這個介面要做哪些內容,而不是怎麼做。
type namer inte***ce
在go語言中不需要顯示的去實現介面,只要乙個型別實現了該介面中定義的所有方法就是預設實現了該介面,而且允許多個型別都實現該介面,也允許乙個型別實現多個介面。
type animal inte***ce
type bird struct
func
(b bird)
eat(
)type dog struct
func
(d dog)
eat(
)func
eatwhat
(a animal)
func
main()
d := dog
eatwhat
(b)eatwhat
(d)}
有些時候方法傳遞進來的引數可能是乙個介面型別,但是我們要繼續判斷是哪個具體的型別才能進行下一步操作。
func
isdog
(a animal)
bool
return
false
}
空介面內部沒有定義即可表示任何乙個型別
var any inte***ce
any =
1fmt.
println
(any)
any =
"hello"
fmt.
println
(any)
any =
false
fmt.
println
(any)
第七天學習
練習題 1 以下類定義中哪些是類屬性,哪些是例項屬性?class c num 0 def init self self.x 4 self.y 5 c.count 62 怎麼定義私有 法?3 嘗試執行以下 並解釋錯誤原因 4 按照以下要求定義乙個遊樂園門票的類,並嘗試計算2個 1個小孩平日票價。要求 ...
Java學習第七天
類成員 static成員 當使用例項來訪問類成員時,系統底層依然是委託該類來訪問類成員。因此,即便該類例項為null,她依然可以訪問所屬類的類成員。例如 package lesson5 單例模式 singleton 主要通過靜態變數 靜態方法和private構造方法完成。例如 package les...
C 學習第七天
c 中的params引數 引數陣列 1 params引數是陣列。呼叫方式可以陣列方式,也可以單個元素方式。static void test string name,params int scores console.writeline 你好,你的scores is name,sb test 劉德華 ...