m := error(nil)
n := (*error)(nil)
fmt.Printf("%T %+v \n", m, m)
fmt.Printf("%T %+v \n", n, n)
得到的结果
<nil> <nil>
*error <nil>
为啥 m 的 type 是 unset 呢?
1
silencil 2021-10-20 16:58:17 +08:00
插个楼,问下 Go 的就业前景如何。以及是否卷?
|
2
SingeeKing 2021-10-20 17:06:20 +08:00
error 是接口,%T 打印的是实际类型而不是接口类型,下面的程序 type 就有值了
type Error struct {} func (e Error) Error() string { return "error" } var p error = (*Error)(nil) fmt.Printf("%T %+v \n", p, p) |
4
BBCCBB OP @SingeeKing
我的问题其实是从下面这行代码来的. errorInterface := reflect.TypeOf((*error)(nil)).Elem() 为啥这里 TypeOf 参数用 error(nil)不行... 🐶 |
5
joesonw 2021-10-20 23:51:43 +08:00 via iPhone
任意 interface 的 type 都只能这样拿 reflect.Type
interface 是不能实例化的。但*error 是指针类型。 |
7
BBCCBB OP 这样理解也行, struct can not be nil.
|