所謂優雅,即能夠讓擴充套件性更好,便於在後期擴充套件的時候,減少開發時間,以及更加易於新增功能。具體的實現,就是一次對於閉包的靈活使用(閱go-micro)。
從示例**main.go、service.go、options.go的實現來說明。
main.go
package main
func main()
service.go
package main
import
"fmt"
type service inte***ce
type service struct
func newservice
(opts ...option) service
}func
(p *service)
output()
options.go
package main
type option func
(*options)
type options struct
var(
defaultname =
"defaultname"
defaultage =10)
// 如果沒有對指定成員變數初始化,就使用預設引數
func newoptions
(opts ...option)
*options
for _, o :
= range opts
return options
}// 初始化name
func name
(name string) option
}// 初始化age
func age
(age int) option
}
如果後期需要增加引數,只需要在options中增加乙個字段,並且增加乙個字段對應的函式即可。不需要類似傳統寫法再去修改newoptions的入參以及內部的賦值操作。
具體的使用場景,視情況而定,因為用而用就不好了
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...
golang初始化結構體的幾種方式(對比)
參考 僅作學習用途 結構體是眾多屬性的集合,每個屬性都有其型別和值。在對結構體的使用中,結構體的初始化必不可少,本文列舉go中主要的幾種初始化方法及示例,最後從記憶體分配角度分析了其區別。type person struct func main 方式1 func main 方式2 func main...