Почему две одинаковые строковые переменные не равны? Это из-за размера байтового массива? - PullRequest
0 голосов
/ 12 апреля 2020

Сравнение неверно из-за размера байта для strBytes , установленного для строки?

str := "test"

strBytes := make([]byte, 10)
copy(strBytes[:], str)

str1 := strings.TrimSpace(string(strBytes))

//why is this comparison false even though the string object is same => "test"
compare := str == str1

fmt.Printf("%v == %v = %v", str, str1, compare)

Go игровая площадка

1 Ответ

1 голос
/ 12 апреля 2020

string(strBytes) не идентичен str, поскольку содержит непечатаемые руны. Вы можете проверить, печатается ли руна с помощью unicode.IsPrint метода . Здесь - это код, который показывает непечатаемые руны в strBytes:

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

func main() {
    str := "test"
    strBytes := make([]byte, 8)
    copy(strBytes[:], str)

    for len(strBytes) > 0 {
        r, size := utf8.DecodeRune(strBytes)
        fmt.Printf("Char: %q; Printable: %v\n", r, unicode.IsPrint(r))

        strBytes = strBytes[size:]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...