With a "true" anonymous structure return value
If you want to use the anonymous return value of the structure, it will look really ugly.
? , , . return, , . !
:
func (p *Project) OmitUsername() *struct {
}
, : . { . , return , , , ("syntax error: unexpected return").
:
func (p *Project) OmitUsername() *struct {
Id uint
Alias string
Data *json.RawMessage
Scheme Scheme
} {
}
return, :
func (p *Project) OmitUsername() *struct {
Id uint
Alias string
Data *json.RawMessage
Scheme Scheme
} {
return &struct {
Id uint
Alias string
Data *json.RawMessage
Scheme Scheme
}{p.Id, p.Alias, p.Data, p.Scheme}
}
, . , , nil, - , , ! , return, , , :
func (p *Project) OmitUsername2() (ret struct {
Id uint
Alias string
Data *json.RawMessage
Scheme Scheme
}) {
ret.Id = p.Id
ret.Alias = p.Alias
ret.Data = p.Data
ret.Scheme = p.Scheme
return
}
:
p := Project{"Bob", 1, "bobie", nil, nil}
fmt.Println(p.OmitUsername())
fmt.Println(p.OmitUsername2())
( Go Playground):
&{1 bobie <nil> <nil>}
{1 bobie <nil> <nil>}
...
,
... , . , :
type BaseProject struct {
Id uint
Alias string
Data *json.RawMessage
Scheme Scheme
}
type Project struct {
BaseProject
Username string
}
func (p *Project) OmitUsername() BaseProject {
return p.BaseProject
}
:
p := Project{BaseProject{1, "bobie", nil, nil}, "Bob"}
fmt.Println(p.OmitUsername())
( Go Playground):
{1 bobie <nil> <nil>}
:
, (BaseProject), p.Id, Project. .