如何将Go模板中的长函数拆分到多行?
在Go模板中拆分长printf调用的几种方法
嘿,这个问题我太熟悉了!处理这种超长的模板调用确实头疼,好在Go模板提供了几种优雅的拆分方式,既保证可读性又不破坏功能:
方法1:拆分格式字符串并对齐参数
你可以把长格式字符串拆成多行,用+拼接起来,同时把每个参数单独换行对齐,这样一眼就能看清每个占位符对应的值:
{{ printf ("mongodb://%s:%s@%s/%s?" + "authSource=admin&replicaSet=%s&" + "readPreference=nearest&w=majority") .Values.rocketchat.mongo.username .Values.rocketchat.mongo.password .Values.rocketchat.mongo.database .Values.mongodb-replicaset.replicaSetName | b64enc | quote }}
Go模板会自动忽略换行和多余的空白,所以这种写法完全不会影响printf的执行结果,反而让每个参数的对应关系一目了然。
方法2:提前定义格式变量
如果觉得直接拼接字符串还是有点乱,可以先把格式字符串存到一个模板变量里,再传入printf,这样逻辑更清晰:
{{- $mongoUriFormat := "mongodb://%s:%s@%s/%s?authSource=admin&replicaSet=%s&readPreference=nearest&w=majority" -}} {{ printf $mongoUriFormat .Values.rocketchat.mongo.username .Values.rocketchat.mongo.password .Values.rocketchat.mongo.database .Values.mongodb-replicaset.replicaSetName | b64enc | quote }}
这里的{{- ... -}}是用来去掉变量定义前后的多余空白,避免生成不必要的空格。
小提醒
注意原格式里的&——如果你的场景是直接生成MongoDB连接URI,其实用&就足够了,&是HTML转义后的符号,只有在输出HTML内容时才需要。不过如果你的模板原本就需要保留转义,那就保持原样就行。
内容的提问来源于stack exchange,提问作者allsap
相关产品推荐
相关产品推荐

