Подтвердить что ты не робот

Может ли 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
'########################'
>>>

Может ли Голанг каким-то образом сделать эквивалент?

4b9b3361

Ответ 1

Он имеет функцию вместо оператора, 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(y)
}

Обратите внимание, что я использовал utf8.RuneCountInString(x) вместо len(x); первый подсчитывает "руны" (кодовые точки Юникода), а последний подсчитывает байты. В случае "my new text is this long" разница не имеет значения, так как все символы являются только одним байтом, но хорошо привыкнуть указывать, что вы имеете в виду.

(В Python 2 len подсчитывает байты на простых строках и рунах в строках Unicode (u'...'). В Python 3, простые строки - это строки Unicode и len подсчитывает руны; если вы хотите подсчитать байты, вы должны закодировать строку в bytearray. В Go есть только один тип строки, и вам не нужно преобразовывать, но вам нужно выбрать функцию, которая соответствует семантике вы хотите.)

Ответ 2

Да, он может, хотя и не с оператором, а с функцией в стандартной библиотеке.

Это было бы очень легко с помощью простого цикла, но стандартная библиотека предоставляет вам высоко оптимизированную версию: 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().