разница в скобках и фигурных скобках в Голанге - PullRequest
0 голосов
/ 31 октября 2018
a := []byte("H") //works
a := []byte{"H"} //does not compile

В чем заключается концептуальная разница между () и {}, использованными выше?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Причина заключается в разнице между преобразованиями типов и литералами срезов .

_ = []byte("Hi!")         // Converts a string literal to a []byte.
_ = []byte{'H', 'i', '!'} // Initializes a []byte literal

Ваш второй пример []byte{"H"} не может скомпилироваться, потому что "H" это строка литерал, который используется вместо руны литерал , это сравнимо с попыткой присвоить строку переменной байтового типа:

var y byte = 'H' // OK
var x byte = "H" // ERROR: cannot use "H" (type string) as type byte in assignment
0 голосов
/ 31 октября 2018

В первом a := []byte("H") вы вводите строку "H" в байтовый массив.

Во втором a := []byte{"H"} вы определяете байтовый массив и присваиваете «H» в качестве первого значения, что недопустимо.

Вы можете сравнить второй с определением массива строк:

s := []string{"hello","world",".."} // works
f := []string{1,2,4} // fails because the datatype is wrong
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...