[Golang] Design Pattern | PJCHENder 未整理筆記

文章推薦指數: 80 %
投票人數:10人

在Go 中需要為某些struct (通常是一些設定),可以同時有預設值的,但有希望可以客製化設定時,可以使用這個方式:. Skiptomaincontent這個網站放置的是未發佈或未完整整理的筆記內容,若想檢視正式的筆記內容請到PJCHENder那些沒告訴你的小細節。

PJCHENderOfficialDocsBlogGitHubFacebookLinkedin🌜🌞SearchOnthispageFunctionalOptions​資料來源:GO程式設計模式:FUNCTIONALOPTIONS@陳皓在Go中需要為某些struct(通常是一些設定),可以同時有預設值的,但有希望可以客製化設定時,可以使用這個方式:定義需要可以被config的struct,例如Server定義一個能夠接收*Server為參數的型別,例如Option定義許多能夠修改Server欄位值的函式,例如Protocol,Timeout,等等定義NewServer函式,在這個函式中會有Server的預設值,並且可以透過呼叫函式修改設定//程式碼來源:https://coolshell.cn/articles/21146.html//@陳皓//Server定義可以接收的參數欄位typeServerstruct{AddrstringPortintProtocolstringTimeouttime.DurationMaxconnsintTLS*tls.Config}//Option的型別是可以接受*Server為參數的函式typeOptionfunc(*Server)//Protocol用來為Server添加Protocol欄位funcProtocol(pstring)Option{returnfunc(s*Server){s.Protocol=p}}//Timeout用來為Server添加Timeout欄位funcTimeout(timeouttime.Duration)Option{returnfunc(s*Server){s.Timeout=timeout}}//MaxConns用來為Server添加MaxConns欄位funcMaxConns(maxconnsint)Option{returnfunc(s*Server){s.Maxconns=maxconns}}//TLS用來為Server添加TLS欄位funcTLS(tls*tls.Config)Option{returnfunc(s*Server){s.TLS=tls}}//NewServer用來建立Server物件,並可以根據options回傳funcNewServer(addrstring,portint,options...func(*Server))(*Server,error){//server的預設值定在這server:=Server{Addr:addr,Port:port,Protocol:"tcp",Timeout:30*time.Second,Maxconns:1000,TLS:nil,}for_,option:=rangeoptions{option(&server)}return&server,nil}funcmain(){s1,_:=NewServer("localhost",1024)fmt.Printf("server1:%+v\n",s1)s2,_:=NewServer("localhost",2048,Protocol("udp"))fmt.Printf("server1:%+v\n",s2)s3,_:=NewServer("localhost",8080,Timeout(300*time.Second),MaxConns(1000))fmt.Printf("server1:%+v\n",s3)}CopyPrevious«[note]GoconcurrencyNext[note]cleanarchitecture»FunctionalOptions



請為這篇文章評分?