Golang 可以像 Python 那样乘以字符串吗?

新手上路,请多包涵

Python 可以像这样乘以字符串:

 Python 3.4.3 (default, Mar 26 2015, 22:03:40)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'my new text is this long'
>>> y = '#' * len(x)
>>> y
'########################'
>>>

Golang 能以某种方式做同样的事情吗?

原文由 Duke Dougal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 694
2 个回答

它有一个函数而不是运算符 strings.Repeat 。这是您的 Python 示例的一个端口,您可以在 此处 运行:

 package main

import (
    "fmt"
    "strings"
    "unicode/utf8"
)

func main() {
    x := "my new text is this long"
    y := strings.Repeat("#", utf8.RuneCountInString(x))
    fmt.Println(x)
    fmt.Println(y)
}

请注意,我使用了 utf8.RuneCountInString(x) 而不是 len(x) ;前者计算“符文”(Unicode 代码点),而后者计算字节数。在 "my new text is this long" 的情况下,差异无关紧要,因为所有字符都只有一个字节,但最好养成指定你的意思的习惯:

 len("ā") //=> 2
utf8.RuneCountInString("ā") //=> 1

由于这是一个 Python 比较问题,请注意在 Python 中,一个函数 len 根据你调用它的方式计算不同的东西。在 Python 2 中,它计算纯字符串的字节数和 Unicode 字符串的符文 ( u'...' ):

 Python 2.7.18 (default, Aug 15 2020, 17:03:20)
>>> len('ā') #=> 2
>>> len(u'ā') #=> 1

而在现代 Python 中,纯字符串 Unicode 字符串:

 Python 3.9.6 (default, Jun 29 2021, 19:36:19)
>>> len('ā') #=> 1

如果要计算字节数,则需要先将字符串编码为 bytearray

 >>> len('ā'.encode('UTF-8')) #=> 2

所以 Python 有多种类型的字符串和一个函数来获取它们的长度; Go 只有一种字符串,但你必须选择与你想要的语义相匹配的长度函数。

原文由 Mark Reed 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,它可以,虽然不是使用运算符,而是使用标准库中的函数。

一个简单的循环会很容易,但标准库为您提供了它的高度优化版本: strings.Repeat()

你的例子:

 x := "my new text is this long"
y := strings.Repeat("#", len(x))
fmt.Println(y)

Go Playground 上尝试一下。

注意: len(x) 是字符串的“字节”长度(字节数)(在 UTF-8 编码中,这是 Go 在内存中存储字符串的方式)。如果您想要字符数(符文),请使用 utf8.RuneCountInString()

原文由 icza 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题