[Golang] Design Pattern | PJCHENder 未整理筆記
文章推薦指數: 80 %
在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
延伸文章資訊
- 1Design Patterns in Go - Refactoring.Guru
The Catalog of Go Examples · Creational Patterns · Abstract Factory · Builder · Factory Method · ...
- 2senghoo/golang-design-pattern: 设计模式Golang实现 - GitHub
... 实现-《研磨设计模式》读书笔记. Contribute to senghoo/golang-design-pattern development by creating an accou...
- 3Golang Concurrency Pattern - iT 邦幫忙
Go劍復國-30天導入Golang 系列第26 篇 ... 所謂的CPU & MEM 上限,所以也就意味著goroutine 不能無窮無境的開,那今天就來討論Concurrency Patter...
- 4All Design Patterns in Go (Golang)
A curated list of design patterns implemented in Go. Also if you are interested in learning Golan...
- 5Design Patterns in Go - Medium
I use this pattern in Go very often. And I think Golang is so suitable for this pattern. In this ...