小编典典

从嵌入式结构访问结构字段

go

我想在结构上定义一个方法来验证http请求。但是我在访问结构域时遇到一些问题。

有我的代码。

package main

import "log"

type ReqAbstract struct{}

func (r *ReqAbstract) Validate() error {
    log.Printf("%+v", r)
    return nil
}
func (r *ReqAbstract) Validate2(req interface{}) error {
    log.Printf("%+v", req)
    return nil
}

type NewPostReq struct {
    ReqAbstract
    Title string
}

func main() {
    request := &NewPostReq{Title: "Example Title"}

    request.Validate()
    request.Validate2(request)
}

运行此代码时,得到以下结果

2015/07/21 13:59:50 &{}
2015/07/21 13:59:50 &{ReqAbstract:{} Title:Example Title}

有什么方法可以访问Validate2()方法上的Validate()方法上的结构字段?


阅读 250

收藏
2020-07-02

共1个答案

小编典典

您不能从内部结构访问外部结构字段。仅内部字段来自外部。您可以做的是:

type CommonThing struct {
    A int
    B string
}

func (ct CommonThing) Valid() bool {
    return ct.A != 0 && ct.B != ""
}

type TheThing struct {
    CommonThing
    C float64
}

func (tt TheThing) Valid() bool {
    return tt.CommonThing.Valid() && tt.C != 0
}
2020-07-02