建造者模式适合组装属性多、创建逻辑复杂且需分步构造的对象;Go通过结构体+链式调用+可选参数实现,含Builder类型、Set方法链式调用、Build校验与返回不可变对象。
建造者模式适合用来组装属性多、创建逻辑复杂、且需要分步骤构造的对象。Golang 没有构造函数重载和方法重载,但通过结构体 + 链式调用 + 可选参数的 Builder 实现,既清晰又灵活。
先设计最终要构建的复杂对象(比如 ServerConfig),再为其配套一个 Builder 类型(如 ServerConfigBuilder)。Builder 内部持有目标对象字段的副本,提供设置方法并返回自身,支持链式调用。
示例:
type ServerConfig struct {
Host string
Port int
TLS bool
Timeout int
LogLevel string
}
type ServerConfigBuilder struct {
config ServerConfig
}
func NewServerConfigBuilder() *ServerConfigBuilder {
return &ServerConfigBuilder{
config: ServerConfig{
Port: 8080,
Timeout: 30,
LogLevel: "info",
},
}
}
每个 SetXXX 方法只负责更新对应字段,并返回 *ServerConfigBuilder,保证链式调用不断开。不校验或执行副作用,保持 Builder 轻量。
实现示例:
func (b *ServerConfigBuilder) SetHost(host string) *ServerConfigBuilder {
b.config.Host = host
return b
}
func (b *ServerConfigBuilder) EnableTLS() *ServerConfigBuilder {
b.config.TLS = true
return b
}
Build() 是 Builder 的终点,它应做两件事:一是校验必要字段(如 Host 不为空),二是返回不可变的最终对象(通常返回值类型是结构体而非指针,避免外部篡改)。
校验失败时可 panic 或返回 error —— 推荐返回 error 更可控:
func (b *ServerConfigBuilder) Build() (*ServerConfig, error) {
if b.config.Host == "" {
return nil, fmt.Errorf("Host is required")
}
// 可选:深拷贝或冻结字段(如转为只读字段)
cfg := b.config // 值拷贝,安全
return &cfg, nil
}
用户无需记忆参数顺序,不用传一堆零值占位,也不用手动初始化中间状态。组合过程语义清晰,IDE 还能自动补全提示。
示例调用:
cfg, err := NewServerConfigBuilder().
SetHost("api.example.com").
SetPort(443).
EnableTLS().
SetTimeout(60).
SetLogLevel("debug").
Build()
if err != nil {
log.Fatal(err)
}
// cfg 已就绪,可直接使用
基本上就这些。Builder 在 Golang 中不是靠语法糖,而是靠显式设计和链式约定达成的——不复杂但容易忽略校验和不可变性。
# go
# golang
# red
# String
# 构造函数
# Error
# 结构体
# int
# 指针
# 堆
# 值类型
# 函数重载
# 对象
# ide
# 链式
# 可选
# 还能
# 一是
# 布尔
# 可直接
# 而非
# 件事
# 为空
# 再为
相关文章:
如何在Ubuntu系统下快速搭建WordPress个人网站?
Android使用GridView实现日历的简单功能
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何选择适配移动端的WAP自助建站平台?
b2c电商网站制作流程,b2c水平综合的电商平台?
,巨量百应是干嘛的?
存储型VPS适合搭建中小型网站吗?
如何在阿里云ECS服务器部署织梦CMS网站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
建站org新手必看:2024最新搭建流程与模板选择技巧
宝塔面板创建网站无法访问?如何快速排查修复?
建站主机解析:虚拟主机配置与服务器选择指南
如何打造高效商业网站?建站目的决定转化率
高防服务器租用首荐平台,企业级优惠套餐快速部署
c# 在ASP.NET Core中管理和取消后台任务
如何高效配置IIS服务器搭建网站?
内网网站制作软件,内网的网站如何发布到外网?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
,购物网站怎么盈利呢?
html制作网站的步骤有哪些,iapp如何添加网页?
建站之星安装后界面空白如何解决?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
建站之星如何开启自定义404页面避免用户流失?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
大连网站制作公司哪家好一点,大连买房网站哪个好?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
济南专业网站制作公司,济南信息工程学校怎么样?
如何通过.red域名打造高辨识度品牌网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何制作一个表白网站视频,关于勇敢表白的小标题?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
网站微信制作软件,如何制作微信链接?
如何通过西部数码建站助手快速创建专业网站?
宝塔建站后网页无法访问如何解决?
如何在建站之星绑定自定义域名?
婚礼视频制作网站,学习*后期制作的网站有哪些?
linux top下的 minerd 木马清除方法
如何做网站制作流程,*游戏网站怎么搭建?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
宝塔Windows建站如何避免显示默认IIS页面?
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何通过远程VPS快速搭建个人网站?
建站之星3.0如何解决常见操作问题?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
微信h5制作网站有哪些,免费微信H5页面制作工具?
*请认真填写需求信息,我们会在24小时内与您取得联系。