«Значения интерфейса могут рассматриваться как кортеж значения и конкретного типа».-> Интерфейс просто заботится о том, реализует ли ваш тип методы, которые ему нужны.В его структуре данных хранятся две вещи: 1. Тип, который его реализует. 2. Значение (типа # 1)
Вот простой пример, чтобы дать вам представление о том, на что это похоже:
package main
import (
"fmt"
"reflect"
)
type Animal interface {
run()
}
type Cat struct {
a int
}
func main() {
kitty := Cat{2}
var anim Animal
fmt.Println(kitty)
kitty.run()
anim = kitty //interface
fmt.Println(anim)
anim.run()
t := reflect.TypeOf(anim)
v := reflect.ValueOf(anim)
fmt.Println(t.String())
fmt.Println(v)
}
func (c Cat) run() {
fmt.Println("Have fun")
}
Вывод:
{2}
Have fun
{2}
Have fun
main.Cat
{2}
https://play.golang.org/p/xeozR3VT-9J, хотя вам нужно будет прочитать больше и попробовать несколько примеров самостоятельно, чтобы лучше это понять.