您好,登錄后才能下訂單哦!
學習過Python或者java的朋友,都會習慣里面的類,而Golang中是沒有類的概念,而有類似的概念結構體,結構體是一款功能強大的數據類型,能夠簡單的實現其他語言中類實現的功能,能夠序列化json,支持繼承,在繼承時,繼承父結構體的屬性和父結構體的方法。同時結構體也像其他數據結構和函數一樣,以大寫字母開頭的結構體能夠導出本包,應用到其他包。而當開始定義的一些小寫字母定義的結構體,我們想要用于其他包的時候,可以用工廠函數的方式實現。此外可以使用工廠函數結合定義某些方法實現面向對象的封裝特性。
封裝的介紹:
封裝(encapsulation)就是把抽象出的字段和對字段的操作封裝在一起,數據被保護在內部,程序的其 它包只有通過被授權的操作(方法),才能對字段進行操作。
封裝的理解和好處:
1) 隱藏實現細節
2) 可以對數據進行驗證,保證安全合理(某些字段)
如何體現封裝
1) 對結構體中的屬性進行封裝
2) 通過方法,包 實現封裝
封裝的實現步驟
1) 將結構體、字段(屬性)的首字母小寫(不能導出了,其它包不能使用,類似 private)
2) 給結構體所在包 供一個工廠模式的函數,首字母大寫。類似一個構造函數
3) 供一個首字母大寫的 Set 方法(類似其它語言的 public),用于對屬性判斷并賦值
func (var 結構體類型名) SetXxx(參數列表) (返回值列表) {
//加入數據驗證的業務邏輯
var.字段 = 參數}
4) 供一個首字母大寫的 Get 方法(類似其它語言的 public),用于獲取屬性的值func (var 結構體類型名) GetXxx() {
return var.age; }
特別說明:在 Golang 開發中并沒有特別強調封裝,這點并不像 Java. 所以 醒學過 java 的朋友, 不用總是用 java 的語法特性來看待 Golang, Golang 本身對面向對象的特性做了簡化的.
相關示例
package person import "fmt" //定義不能導出的結構體 type person struct { Name string age int sal float64 } //定義工廠模式的函數 首字母大寫 類似構造函數 func NewPerson(name string) *person{ return &person{ Name:name, } } //提供一個Set方法 設置年齡 func (user *person) Setage(age int) { if age >0 && age < 150 { user.age = age }else { fmt.Println("年齡數值不對!") } } //獲取年齡 func (user *person) Getage() int{ return user.age } //更改年齡 func (user *person) Updateage(age int) int{ user.age =age return user.age } //更改姓名 func (user *person) Updatename(name string) string{ user.Name=name return user.Name }
在另一個包中調用person
main ( ) () { person.() fmt.() .() fmt.() .() fmt.() .() fmt.() fmt.() .() fmt.() }
結果
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。