type iface struct {
tab *itab
data unsafe.Pointer
}
Если слегка модифицировать пример автора, Вам станет ясно почему в первом случае s==i это false, а во втором true:
package main
import (
"fmt"
"reflect"
)
type (
I interface{}
S struct{}
)
func main() {
var i I
var s *S
fmt.Println("Type of I", reflect.TypeOf(i))
fmt.Println("Type of S", reflect.TypeOf(s))
fmt.Println(s, i) // nil nil
fmt.Println(s == nil, i == nil, s == i) // t,t,f: то есть они как бы равны, но в то же время не равны.
i = s
fmt.Println("Type of I", reflect.TypeOf(i))
fmt.Println("Type of S", reflect.TypeOf(s))
fmt.Println(s, i) // nil nil
fmt.Println(s == nil, i == nil, s == i) // t,f,t: то есть они как бы не равны, но в то же время равны.
}
Type of I <nil>
Type of S *main.S
<nil> <nil>
true true false
Type of I *main.S <--- теперь i это *S
Type of S *main.S <---
<nil> <nil>
true false true
Если вы присвоили что-то в пустой интерфейс - itab уже не nilпоэтому во втором случае i == nil будет false
А как быстро Вы получили разрешение? Я ждал 6 месяцев. По поводу Берлина — мне в автошколе рассказывали, что в этом году недостаток персонала в Bürgeramt. Не успевают обрабатывать все заявления.
Все правильно, сдавать теорию и практику нужно. Посещать теорию необязательно. Но для этого нужно договор с автошколой, augentest и erste hilfe подать вместе с заявлением о замене в Bürgeramt. Там оно и обрабатывалось 6 месяцев. Это в Берлине.
Интерфейс изнутри устроен так:
Если слегка модифицировать пример автора, Вам станет ясно почему в первом случае s==i это false, а во втором true:
Если вы присвоили что-то в пустой интерфейс -
itabуже неnilпоэтому во втором случаеi == nilбудетfalse