Go编译报错:cannot slice r.route (type *[]Route) 问题咨询
问题分析与解决
你遇到的这个编译错误,核心原因是你尝试对一个切片指针直接进行切片操作,而Go语言不支持这种用法。
错误根源
在你的代码里,r.route的类型是*[]Route(指向切片的指针),而切片语法[i:]只能直接作用于切片类型,不能作用于切片指针。所以这行代码:
if err := r.checkUriDuplication(r.route[i:], e.Uri); err != nil {
会触发编译器报错:cannot slice r.route (type *[]Route)
修复方案
你需要先对指针进行解引用,获取到它指向的实际切片,再执行切片操作。把代码改成这样:
if err := r.checkUriDuplication((*r.route)[i:], e.Uri); err != nil {
这里的*r.route会拿到指针指向的[]Route切片,之后再用[i:]进行切片就合法了。
额外小提示
顺便注意下你代码里的这部分:
mv := newMethodsVerifier(&e.Methods) if err := mv.validate(); len(err) > 0 { }
这里看起来有点问题:如果mv.validate()返回的是单个错误类型,len(err)是不合法的(错误类型没有长度属性);如果它返回的是错误切片,那变量名改成errs会更清晰,避免和单个错误变量混淆。
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

