Ниже приведен код, с некоторыми комментариями, чтобы помочь прояснить каждую роль утверждения в этом сообщении.
import "testing"
func TestReverse(t *testing.T) {
cases := []struct { // declaration of anonymous type
in, want string // fields on that type called in and want, both strings
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
} // composite literal initilization
// note the use of := in assigning to cases, that op combines declaration and assignment into one statement
for _, c := range cases { // range over cases, ignoring the index - the underscore means to discard that return value
got := Reverse(c.in) // c is the current instance, access in with the familiar dot notation
if got != c.want { // again, access operator on c, the current instance
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want) // more access
}
}
}
Дайте мне знать, если это поможет. Я могу попытаться дать больше резюме на разговорном языке или добавить дополнительные сведения, если некоторые из заявлений не имеют смысла. Кроме того, fyi, если вы не знакомы диапазонам диапазонов по коллекции, возвращаете k, v
, где k
является индексом или ключом и v
значением.
EDIT: подробности о декларировании/initilization из cases
cases := []struct {
in, want string
}
Этот бит внутри первой пары фигурных скобок является определение структуры. Это анонимный тип, нормальное объявление будет выглядеть так:
type case strcut {
in string
want string
}
Если что-то подобное, то было бы тип называется case
в рамках этого пакета (не экспортируются, если вы хотите, чтобы сделать это «общественность», так что необходимо будет type Case
вместо этого). Вместо этого примеры struct являются анонимными. Он работает так же, как и обычный тип, однако, как разработчик, вы не сможете ссылаться на этот тип, чтобы вы могли практически работать с инициализацией коллекции. Внутренне этот тип такой же, как и любая другая структура с двумя невыложенными строками для полей. Поля называются in
и want
. Обратите внимание, что в задании cases := []struct
у вас есть []
до struct
, это означает, что вы объявляете кусочек этого анонимного типа.
Этот следующий бит называется статической инициализацией. Это синтаксис для инициализации коллекций типами. Каждый из этих вложенных битов, как {"", ""}
, является объявлением и инициализацией одной из этих анонимных структур, обозначаемой снова фигурными фигурными фигурными скобками. В этом случае вы назначаете две пустые строки in
и want
соответственно (если вы не используете имена, порядок будет таким же, как в определении). Внешняя пара фигурных скобок предназначена для среза. Если ваш фрагмент был произнесён ints или strings, тогда вы просто получили бы значения прямо без дополнительного уровня вложенности, например myInts := []int{5,6,7}
.
{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
}
Они не установив переменную на структуру, они установив его ломтиком структур. –