Тип и вид значения в Go
Тип называет конкретное имя, а вид говорит,
структура это, срез или число. У одной
структуры имя может быть main.User,
а вид останется структурой, как у любого
другого типа с полями.
Имя типа и вид берут из одного описания значения: сначала получают тип по переменной, затем у типа читают строковое имя и отдельно запрашивают вид. Два ответа не подменяют друг друга.
Создадим пользователя и выведем имя типа и его вид:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
u := User{Name: "ann"}
t := reflect.TypeOf(u)
fmt.Println(t.String())
fmt.Println(t.Kind())
}
На экране строка с полным именем типа и слово, обозначающее структуру. Вид не повторяет имя пакета: он относится к форме данных, а не к вашему объявлению.
Сравним вид у целого числа и у среза строк:
package main
import (
"fmt"
"reflect"
)
func main() {
n := 10
items := []string{"a", "b"}
fmt.Println(reflect.TypeOf(n).Kind())
fmt.Println(reflect.TypeOf(items).Kind())
}
Дана структура:
type Point struct {
X int
Y int
}
p := Point{X: 1, Y: 2}
Выведите имя типа p и скажите,
какой вид вернется у этого типа.
Дано значение:
n := 0
Узнайте вид n и выведите его.
Дан следующий срез:
labels := []string{"go", "rust"}
Сравните вид labels с видом у
структуры с полями. Скажите, совпадут
ли ответы.