接口指针和结构体实例指针的赋值问题

Aruforce · · 1666 次点击
怎么粘贴代码不太对啊 ``` type CustomError struct { Msg string; } func(customError *CustomError)Error() string{ return customError.Msg; } func main() { var err *errors = &errors.CustomError{"123456"}; fmt.Println(err.Error()); } ``` 这个样子 的代码, &errors.CustomError{"123456"} 是一个CustomError指针,CustomError 实现了error的全部接口 ;err *error 是一个error类型的指针; 难道err 不能接受 &errors.CustomError{"123456"}这个么?我个人直觉 这应该是很正常的操作啊
#2
更多评论
go里面没有接口指针的说法,接口就是接口,可以接受任何实现了这个接口的类型的对象赋值 var err *errors.CustomError = &errors.CustomError{"123456"}; 这个你是想写成这样吗: var err error = &CustomError{"123456"};
#1
1. CustomError是你自定义的类型,不是package errors里面定义的类型,不能写成errors.CustomError 2. `*error 是一个error类型的指针;` error是个interface,不能取指针,也没必要 3. 不要把C++里面的语法直接套到go里面,go的好就在于他的独特,在于作者写了几十年的C/C++后觉得应该搞一个更好用的更贴近实际工作需要的语言,如果go只是其他语言的复制,就没必要发明他了
#3