猿问

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

我想在结构上定义一个方法来验证 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}

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


HUH函数
浏览 158回答 2
2回答

临摹微笑

您不能从内部结构访问外部结构字段。只有来自外部的内部字段。你可以做的是组成: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}

当年话下

你可以用指向自己的方式定义归档package mainimport (    "log")type ReqAbstract struct{    selfPointer interface{}}func (r *ReqAbstract) Assign(i interface{}) {    r.selfPointer = i}func (r *ReqAbstract) Validate() error {    log.Printf("%+v", r.selfPointer)    return nil}func (r *ReqAbstract) Validate2(req interface{}) error {    log.Printf("%+v", req)    return nil}type PostReq struct {    ReqAbstract    Title string}func NewPostReq(title string) *PostReq {    pr := &PostReq{Title:title}    pr.Assign(pr)    return pr}func main() {    request := NewPostReq("Example Title")    request.Validate()    request.Validate2(request)}这将输出:2009/11/10 23:00:00 &{ReqAbstract:{selfPointer:0x10438180} Title:Example Title} 2009/11/10 23:00:00 &{ReqAbstract:{selfPointer:0x10438180} Title:Example Title}检查操场
随时随地看视频慕课网APP

相关分类

Go
我要回答