猿问

无法切片 r.route(类型 *[]Route)

我有以下代码:


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)

我究竟做错了什么?


杨魅力
浏览 115回答 1
1回答

红糖糍粑

r.route是指向切片的指针,而不是切片。(*r.route)是一个切片,所以你必须:(*r.route)[i:]你确定你需要一个指向该结构中切片的指针吗?这几乎总是不必要的。切片已经包含指向底层数组的指针。它没有数据,它是指向数据的指针,以及用于定义其视图的附加信息。简单定义:type routeVerifier struct {    route []Route}checkUriDuplication可以定义为采用[]Route.
随时随地看视频慕课网APP

相关分类

Go
我要回答