我有以下代码:type routeVerifier struct { route *[]Route}func (r *routeVerifier) checkUriDuplication(comparer *[]Route, uri string) error { for _, e := range *comparer { if e.Uri == uri { msg := fmt.Sprintf("The uri %s already exist", uri) return errors.New(msg) } } return nil}func (r *routeVerifier) validate() routesErrorLogger { errors := routesErrorLogger{} for i, e := range *r.route { error := newRouteErrorLogger(e.Uri) if err := r.checkUri(e.Uri); err != nil { error.add(err) } if err := r.checkUriDuplication(r.route[i:], e.Uri); err != nil { error.add(err) } mv := newMethodsVerifier(&e.Methods) if err := mv.validate(); len(err) > 0 { } }}编译器抱怨:descriptor/route_verifier.go:55:42: cannot slice r.route (type *[]Route)我究竟做错了什么?
1 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
r.route是指向切片的指针,而不是切片。(*r.route)是一个切片,所以你必须:
(*r.route)[i:]
你确定你需要一个指向该结构中切片的指针吗?这几乎总是不必要的。切片已经包含指向底层数组的指针。它没有数据,它是指向数据的指针,以及用于定义其视图的附加信息。
简单定义:
type routeVerifier struct {
route []Route
}
checkUriDuplication可以定义为采用[]Route.
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消
