Go匿名结构体:不用起名的“临时工“,真香!

简介: 匿名结构体是Go中轻量级临时数据打包工具,无需预先定义类型,适合函数参数、测试Mock、JSON序列化等一次性场景。它写法简洁、避免类型污染,但不可复用、不能定义方法,应谨慎用于核心逻辑。(239字)

💡 一句话总结:匿名结构体 = 临时数据打包神器,用完即走,不占编制!

啥是匿名结构体?

普通结构体像"正式员工",得先注册类型:

type Car struct {
   
    Make  string
    Model string
    Year  int
}
camry := Car{
   Make: "Toyota", Model: "Camry", Year: 2020}

匿名结构体?直接"外包上岗",类型?不存在的👇

camry := struct {
   
    Make  string
    Model string
    Year  int
}{
   
    Make: "Toyota", Model: "Camry", Year: 2020,
}
// 照样用:camry.Model ✅

什么时候用它?真实场景走起!

🎯 场景1:函数参数"临时打包"

func ShowProduct(p struct {
   
    Name  string
    Price float64
}) {
   
    fmt.Printf("%s: $%.2f\n", p.Name, p.Price)
}

// 调用时直接"现捏现用"
ShowProduct(struct {
   
    Name  string
    Price float64
}{
   "MacBook", 9999.00})

🤔 个人看法:这就像点外卖——不用自己买菜洗菜,直接下单开吃!但别顿顿都点,容易"营养不良"(代码难维护)。

🧪 场景2:单元测试快速Mock

mockDB := struct {
   
    Query func(sql string) ([]Row, error)
}{
   
    Query: func(sql string) ([]Row, error) {
   
        return []Row{
   {
   ID: 1}}, nil // 假装查到了
    },
}
// 直接传给被测函数,清爽!

⚙️ 场景3:JSON序列化"快闪"

data := struct {
   
    Server string `json:"server"`
    Uptime int    `json:"uptime"`
}{
   
    Server: "prod-01", Uptime: 42,
}
json.Marshal(data) // {"server":"prod-01","uptime":42}

⚠️ 踩坑提醒(血泪经验)

优点 缺点
✅ 写起来快,临时用真香 ❌ 不能定义方法(想加行为?没门)
✅ 减少类型污染,代码轻量 ❌ 无法复用,复制粘贴警告⚠️
✅ 测试/配置场景神器 ❌ 字段多了可读性暴跌📉

🎯 我的原则:核心业务用命名结构体,临时胶水代码用匿名结构体——就像厨房:主菜用专业厨具,拌个沙拉用一次性碗,合理分工!

最后唠两句

匿名结构体不是"银弹",但绝对是工具包里的"瑞士军刀"🔪。用对了场景,代码清爽如新;滥用?恭喜你,喜提"天书代码"成就📚。

相关文章
|
Java 数据管理 关系型数据库
机票预订系统(java+mysql+navicat)
机票预订系统(java+mysql+navicat)
1029 1
机票预订系统(java+mysql+navicat)
|
4月前
|
关系型数据库 分布式数据库 数据库
议程抢先看|2026阿里云PolarDB开发者大会,重磅来袭
2026年1月20日,阿里云PolarDB开发者大会将于上海五角场凯悦酒店举行!聚焦数据库前沿技术,1场主论坛+3场分论坛,探讨行业趋势与创新实践。议程精彩,报名从速!
|
1月前
|
安全 关系型数据库 MySQL
阿里云云数据库RDS功能、优势、应用场景及收费标准与最新活动参考
阿里云的云数据库RDS是一款安全稳定、便捷易用、可弹性伸缩的关系型数据库服务,支持MySQL、SQL Server、PostgreSQL和MariaDB等主流数据库引擎。它提供高可用架构、自动化运维、安全防护及弹性扩展等核心功能,满足企业不同业务场景需求,如高可用与容灾、读写分离与负载均衡、安全与合规等。此外,阿里云还提供多款特惠云数据库产品及云服务器优惠活动,助力企业轻松上云,实现数据高效管理与业务创新提速。
|
3月前
|
Kubernetes 前端开发 调度
一文掌握pod亲和性及调度策略
Kubernetes中,Pod是调度的基本单位。通过nodeName、nodeSelector、亲和性等策略,可精细控制Pod部署位置,实现资源优化、低延迟通信与故障隔离。支持硬约束与软约束,结合标签选择器灵活配置。
373 4
|
11月前
|
网络协议 算法 物联网
Go语言的WebSocket与实时通信
本文介绍了 WebSocket 技术及其在 Go 语言中的实现。WebSocket 是一种基于 TCP 的协议,支持客户端与服务器间的持久连接和实时通信,相比传统 HTTP 更高效。文章详细讲解了 WebSocket 的核心概念、Go 语言中的相关库(如 `gorilla/websocket`),以及其实现步骤和应用场景。通过代码示例展示了如何构建 WebSocket 服务器和客户端,并探讨了其在聊天应用、实时更新、游戏和物联网等领域的实际用途。此外,还推荐了相关工具和学习资源,帮助开发者更好地掌握这一技术。
502 3
|
7月前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
472 5
|
8月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
399 0
|
11月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
337 18
|
存储 安全 Go
Go语言空接口如此简单,原来可以这么玩!
Go语言空接口如此简单,原来可以这么玩!
489 0
|
C#
C#中的overload,overwrite,override的语义区别
以上概念是面向对象编程中实现多态性和继承的重要基石。理解它们之间的区别对于编写清晰、可维护的代码至关重要。
739 7