【发布时间】:2021-01-12 19:47:44
【问题描述】:
Go 编程语言的标准库公开了一个名为 strings.Builder 的结构,它允许以一种有效的方式通过重复连接轻松构建字符串,类似于 C# 或 Java 的 StringBuilder。
在 Java 中,我会使用 StringBuilder 的构造函数来“克隆”对象,如下所示:
StringBuilder newBuffer = new StringBuilder(oldBuffer.toString());
在Go中,我只能看到以下两行方式:
newBuffer := strings.Builder{}
newBuffer.WriteString(oldBuffer.String())
没有其他 .Clone() 初始化方法(我可能还没有找到)。
有没有比我介绍的更简洁/简洁的另一种方式?
【问题讨论】:
-
当然。添加您自己的函数以及克隆字符串生成器所需的 两行,然后只需一行即可为调用者克隆。
-
WriteString 方法可能会失败,因此它返回两个值,一个字符串和一个错误。我不确定这些是如何在 C# 或 Java 中实现的,但我想如果它们也可能失败,则需要某种异常处理。
-
@Grizzle WriteString 方法被声明为返回错误,以便 StringBuilder 满足 io.StringWriter 接口,而不是因为 WriteString 可能会失败。不需要错误检查。
-
@Gavin 当然,这将是最后的选择......我只是想检查一下我是否缺少另一种更标准/惯用的形式。很抱歉因为我的好奇心打扰了您!
-
如果你查看builder.go的源代码,你会看到很多函数有3行长(克隆这个字符串生成器的函数长度相同,当你计算
return ...)。您是否还会主张只在使用它们的任何地方编写其他两组 2 行? (只是一些思考的食物)
标签: go