先看一段代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

var X interface{}

type T struct{}

func F() {
	type T struct{}
	X = T{}
}

func G() {
	type T struct{}
	_ = X.(T)
}

func main() {
	F()
	G()
}

我们总是可以说“来自不同范围的类型”,因为它们也适用于来自不同包的类型。