Golang如何使用建造者模式生成配置对象

建造者模式用于构造复杂配置对象,通过链式调用设置字段并返回最终实例。定义ClientConfig结构体与ClientConfigBuilder建造者,提供默认值与各类Set方法,最后通过Build输出不可变对象。

Golang如何使用建造者模式生成配置对象

go语言中,建造者模式(Builder Pattern)常用于构造复杂的配置对象,特别是当结构体字段较多、部分字段可选、需要链式调用设置时。它能提升代码的可读性和可维护性,避免使用大量参数的构造函数或暴露结构体字段。

定义配置结构体和建造者

假设我们要构建一个http客户端的配置对象,包含超时、重试次数、用户代理等可选字段。

示例:

先定义配置结构体和建造者:

<pre class="brush:php;toolbar:false;">type ClientConfig struct {     Timeout   int     Retries   int     UserAgent string     proxy     string     TLS       bool }  type ClientConfigBuilder struct {     config *ClientConfig } 

提供构造函数和设置方法

创建一个新实例,并通过方法链逐步设置字段:

立即学习go语言免费学习笔记(深入)”;

Golang如何使用建造者模式生成配置对象

北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 – 带您走进沉浸式AI的双语对照体验

Golang如何使用建造者模式生成配置对象0

查看详情 Golang如何使用建造者模式生成配置对象

<pre class="brush:php;toolbar:false;">// NewClientConfigBuilder 返回一个新的建造者实例 func NewClientConfigBuilder() *ClientConfigBuilder {     return &ClientConfigBuilder{         config: &ClientConfig{             Timeout: 30,      // 默认值             Retries: 3,             TLS:     true,         },     } }  // SetTimeout 设置超时时间 func (b *ClientConfigBuilder) SetTimeout(timeout int) *ClientConfigBuilder {     b.config.Timeout = timeout     return b }  // SetRetries 设置重试次数 func (b *ClientConfigBuilder) SetRetries(retries int) *ClientConfigBuilder {     b.config.Retries = retries     return b }  // SetUserAgent 设置用户代理 func (b *ClientConfigBuilder) SetUserAgent(ua string) *ClientConfigBuilder {     b.config.UserAgent = ua     return b }  // SetProxy 设置代理地址 func (b *ClientConfigBuilder) SetProxy(proxy string) *ClientConfigBuilder {     b.config.Proxy = proxy     return b }  // DisableTLS 关闭TLS func (b *ClientConfigBuilder) DisableTLS() *ClientConfigBuilder {     b.config.TLS = false     return b } 

构建最终对象

添加 Build 方法返回不可变的配置对象:

<pre class="brush:php;toolbar:false;">// Build 返回最终的配置对象 func (b *ClientConfigBuilder) Build() *ClientConfig {     // 可在此处添加校验逻辑     if b.config.Timeout <= 0 {         panic("timeout must be greater than 0")     }     return b.config } 

使用方式如下:

<pre class="brush:php;toolbar:false;">config := NewClientConfigBuilder().     SetTimeout(10).     SetRetries(5).     SetUserAgent("my-app/1.0").     SetProxy("http://proxy.example.com:8080").     DisableTLS().     Build()  // 使用 config 创建客户端 fmt.Printf("%+vn", config) 

这种方式让配置创建清晰、安全且易于扩展。如果将来新增字段,只需在建造者中添加对应方法,不影响已有代码。

基本上就这些。建造者模式在Go中虽不如java那样常见,但在构造复杂配置时非常实用。

上一篇
下一篇
text=ZqhQzanResources