具有 3 个不同指针类型的参数(可以为 nil)的 Sprintf。三元运算符不可用,如何避免写几十行?
php小编子墨在这里为大家解答一个关于Sprintf函数的问题。有时候我们需要使用Sprintf函数来格式化字符串,但是在某些情况下,我们可能会遇到具有三种不同指针类型的参数的情况,而且这些参数可能为nil。在这种情况下,我们无法使用三元运算符来处理,否则代码会变得冗长而且不易阅读。那么,我们应该如何避免写几十行的冗长代码呢?接下来,我将为大家分享一种简洁的解决方案。
问题内容
我要使用 sprintf
创建此字符串
message := fmt.sprintf("unit %s has a level of %v, but is of category %v", *entity.name, *entity.levelcode, *entity.categorycode)
在实体中,变量是指针,可以是nil
:
name
是*string
levelcode
具有*levelcode
类型categorycode
具有*categorycode
类型
但如果它们有一个值,我想要这个值而不是指针。 (即单元 abc 的级别为零,但属于管理单元类别)
无论用什么语言,我都会这样写:
message := fmt.sprintf("unit %s has a level of %v, but is of %v category", entity.name != nil ? *entity.name : "nil", entity.levelcode != nil ? *entity.levelcode : "nil", entity.categorycode != nil ? *entity.categorycode : "nil")
但是go不允许三元运算符。如果我不处理 nil 值,sprintf
将抛出异常。
那么,我必须这样开始吗?
if entity.Name == nil && entity.LevelCode != nil && entity.CategoryCode != nil) { message := "Unit nil has a Level of nil, but is of nil Category" } else { if entity.Name != nil && entity.LevelCode != nil && entity.CategoryCode != nil) { message := fmt.Sprintf("Unit %s has a Level of nil, but is of nil Category", entity.Name != nil ? *entity.Name : "nil") } else { ... for 9 combinations of values nil or not nil values, and 9 sprintf formats? } } What the shortest way to dump my variables content in a formatted line?
解决方法
谢谢,在你的帮助下,我成功地构建了该函数。
// value treat pointers that can be nil, and return their values if they aren't. func value[t any](v *t) string { if (v != nil) { return fmt.sprintf("%v", *v) } else { return "nil" } }
这样称呼
message := fmt.Sprintf("Unit %s has a Level of %v, but is of %v Category", value(entity.Name), value(entity.LevelCode), value(entity.CategoryCode))
为单个 sprintf
编写五个语句...但它有效。
以上是具有 3 个不同指针类型的参数(可以为 nil)的 Sprintf。三元运算符不可用,如何避免写几十行?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

本文讨论了GO编程中的GO FMT命令,该命令将代码格式化以遵守官方样式准则。它突出了GO FMT在维持代码一致性,可读性和降低样式辩论方面的重要性。 FO的最佳实践

本文介绍在Debian系统下监控PostgreSQL数据库的多种方法和工具,助您全面掌握数据库性能监控。一、利用PostgreSQL内置监控视图PostgreSQL自身提供多个视图用于监控数据库活动:pg_stat_activity:实时展现数据库活动,包括连接、查询和事务等信息。pg_stat_replication:监控复制状态,尤其适用于流复制集群。pg_stat_database:提供数据库统计信息,例如数据库大小、事务提交/回滚次数等关键指标。二、借助日志分析工具pgBadg

后端学习路径:从前端转型到后端的探索之旅作为一名从前端开发转型的后端初学者,你已经有了nodejs的基础,...
