go基礎筆記-工廠模式
阿新 • • 發佈:2020-08-10
工廠模式說明 Golang 的結構體沒有建構函式,通常可以使用工廠模式來解決這個問題。 看一個需求 一個結構體的宣告是這樣的: package model type Student struct { Name string... } 因為這裡的 Student 的首字母 S 是大寫的,如果我們想在其它包建立 Student 的例項(比如 main 包),引入 model 包後,就可以直接建立 Student 結構體的變數(例項)。 但是問題來了,如果首字母是小寫的,比如 是 type student struct {....} 就不不行了,怎麼辦---> 工廠模式來解決. 廠模式來解決問題 使用工廠模式實現跨包建立結構體例項。 如果 model 包的 結構體變數首字母大寫,引入後,直接使用, 沒有問題. 如果 model 包的 結構體變數首字母小寫,引入後,不能直接使用, 可以工廠模式解決 model.go 檔案中 package model//定義一個結構體 type student struct{ Name string Score float64 } //因為student結構體首字母是小寫,因此是隻能在model使用 //我們通過工廠模式來解決 func NewStudent(n string, s float64) *student { return &student{ Name : n, Score : s, } } main.go檔案中 package main import ( "fmt" "go_code/chapter10/factory/model" ) func main() { //定student結構體是首字母小寫,我們可以通過工廠模式來解決 var stu = model.NewStudent("tom", 98.8) fmt.Println(*stu) //&{....} fmt.Println("name=", stu.Name, " score=", stu.Score) } 如果 model 包的 student 的結構體的欄位 Score 改成 score,就不能正常訪問了,又應該如何解決這個問題呢? // 如果score欄位首字母小寫,則在其它包不可以直接方法,我們可以提供一個方法 func (s*student) GetScore() float64{ return s.score //ok } 在main.go中呼叫: fmt.Println("name=", stu.Name, " score=", stu.GetScore())