请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

两个不同文件定义的type userError没有理解

type userError interface {

    error

    Message() string

}

type userError string

func (e userError) Error() string {

    return e.Message()

}

func (e userError) Message() string {

    return string(e)

}

而且为什么这里还可以

return userError(

fmt.Sprintf("path %s must start "+

"with %s",

request.URL.Path, prefix))


正在回答 回答被采纳积分+3

1回答

ccmouse 2018-04-24 19:46:14

他们都是小写的,放在不同的包里,不会冲突。如果同一个包,那是不可以的。
不过这边,从string来的userError实现了userError接口,虽然他们互相都看不到对方。因为go语言实现接口只要满足我们有接口规定的函数即可。

3 回复 有任何疑惑可以回复我~
  • 提问者 BskyRui #1
    return userError(
    
    fmt.Sprintf("path %s must start "+
    
    "with %s",
    
    request.URL.Path, prefix)) 是相当于强制类型转换成字符串吗? 如果是, 在web.go中为什么可以这样  if userErr, ok := err.(userError)
    回复 有任何疑惑可以回复我~ 2018-04-24 20:10:10
  • 这也太灵活了,一下没反应过来
    回复 有任何疑惑可以回复我~ 2019-09-24 00:40:17
  • ccmouse 回复 提问者 BskyRui #3
    err是一个接口,err.(userErr)是检测这个错误是否为userErr类型,如果是则可以进一步处理
    回复 有任何疑惑可以回复我~ 2019-09-26 19:37:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信