我想在结构上定义一个方法来验证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()方法上的结构字段?
您不能从内部结构访问外部结构字段。仅内部字段来自外部。您可以做的是:
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 }