3 回答

TA貢獻1780條經驗 獲得超5個贊
它有一個函數而不是一個運算符,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 中, one 函數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 只有一種字符串,但你必須選擇與你想要的語義匹配的長度函數。

TA貢獻1772條經驗 獲得超6個贊
是的,它可以,雖然不是使用運算符,而是使用標準庫中的函數。
使用簡單的循環會很容易,但標準庫為您提供了高度優化的版本: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().
- 3 回答
- 0 關注
- 391 瀏覽
添加回答
舉報