packagemainimport("bytes""encoding/json""fmt")// ExampleOptFunc sets Example's optional attributetypeExampleOptFuncfunc(*Example)// WithAttr1 sets Example's OptionalAttr1 as truefuncWithAttr1()ExampleOptFunc{returnfunc(e*Example){e.OptionalAttr1=true}}// WithAttr2 sets Example's OptionalAttr2 as ifuncWithAttr2(iint)ExampleOptFunc{returnfunc(e*Example){e.OptionalAttr2=i}}// WithAttr3 sets Example's OptionalAttr3 as sfuncWithAttr3(sstring)ExampleOptFunc{returnfunc(e*Example){e.OptionalAttr3=s}}// Example is an example struct with some optional attributestypeExamplestruct{Namestring`json:"name"`OptionalAttr1bool`json:"optional_attr1"`OptionalAttr2int`json:"optional_attr2"`OptionalAttr3string`json:"optional_attr3"`}// NewExample creates Example ptr// requires namefuncNewExample(namestring,opts...ExampleOptFunc)*Example{e:=&Example{Name:name,}for_,opt:=rangeopts{opt(e)}returne}// String returns json-encoded stringfunc(e*Example)String()string{varbbytes.Bufferenc:=json.NewEncoder(&b)enc.SetIndent(""," ")_=enc.Encode(e)returnb.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.