package main
import (
"bytes""encoding/json""fmt")
// ExampleOptFunc sets Example's optional attributetype ExampleOptFunc func(*Example)
// WithAttr1 sets Example's OptionalAttr1 as truefuncWithAttr1() ExampleOptFunc {
returnfunc(e *Example) {
e.OptionalAttr1 = true }
}
// WithAttr2 sets Example's OptionalAttr2 as ifuncWithAttr2(i int) ExampleOptFunc {
returnfunc(e *Example) {
e.OptionalAttr2 = i
}
}
// WithAttr3 sets Example's OptionalAttr3 as sfuncWithAttr3(s string) ExampleOptFunc {
returnfunc(e *Example) {
e.OptionalAttr3 = s
}
}
// Example is an example struct with some optional attributestype Example struct {
Name string`json:"name"` OptionalAttr1 bool`json:"optional_attr1"` OptionalAttr2 int`json:"optional_attr2"` OptionalAttr3 string`json:"optional_attr3"`}
// NewExample creates Example ptr// requires namefuncNewExample(name string, opts ...ExampleOptFunc) *Example {
e :=&Example{
Name: name,
}
for _, opt :=range opts {
opt(e)
}
return e
}
// String returns json-encoded stringfunc (e *Example) String() string {
var b bytes.Buffer
enc := json.NewEncoder(&b)
enc.SetIndent("", " ")
_ = enc.Encode(e)
return b.String()
}
funcmain() {
e :=NewExample("example",
WithAttr1(),
WithAttr2(100),
WithAttr3("testing"))
fmt.Println(e)
// {// "name": "example",// "optional_attr1": true,// "optional_attr2": 100,// "optional_attr3": "testing"// }}
···
Suka Konten Ini?
Bentuk dukungan apapun saya hargai! Dukung saya melalui Bitcoin, Ko-fi, Trakteer, atau lanjut baca konten saya yang lainnya. Kamu bisa menulis respon lewat Webmention dan beritahu saya URLnya lewat Telegraph.