我有一个struct在user呼包account
struct
user
account
type Account struct { Tp string `json:"type"bson:"type"` AccountId string `json:"account_id"bson:"account_id"` Credentials map[string]interface{} `json:"credentials,omitempty"bson:"credentials,omitempty"` ProfilePicture string `json:"profile_picture,omitempty"` Username string `json:"username"bson:"username"` AccessToken map[string]interface{}`bson:"access_token,omitempty"` }
并在user/accounts即时通讯中尝试将此帐户结构嵌入到另一个结构中
user/accounts
type returnAccount struct { user.Account AccessToken string `json:"access_token,omitempty"` }
用户包已正确导入,然后尝试嵌入,我已成功使用它
最终,我正在获取用户帐户并制作returnAccount功能图并从中返回,这是我的功能
returnAccount
func getAccounts(usr *user.AuthenticatedUser, id ...string) (accounts map[string]returnAccount) { accounts = make(map[string]returnAccount) if len(id) > 0 { for _, v := range id { for _, acnt := range usr.Accounts { if acnt.AccountId == v { accounts[acnt.AccountId] = returnAccount{ Tp: acnt.Tp, AccountId:acnt.AccountId, } } } } return } for _, v := range usr.Accounts { accounts[v.AccountId] = returnAccount{ Tp: v.Tp, AccountId:v.AccountId, Username: v.Username, } } return }
但是此代码不会在这里编译是错误消息
# sgin/api/user/accounts api/user/accounts/getaccounts.go:16: unknown returnAccount field 'Tp' in struct literal api/user/accounts/getaccounts.go:17: unknown returnAccount field 'AccountId' in struct literal api/user/accounts/getaccounts.go:26: unknown returnAccount field 'Tp' in struct literal api/user/accounts/getaccounts.go:27: unknown returnAccount field 'AccountId' in struct literal api/user/accounts/getaccounts.go:28: unknown returnAccount field 'Username' in struct literal
一切似乎都非常简单明了,我无法弄清楚为什么会出现此错误,并且我需要达到Account结构的所有成员都已导出
我需要此字段的原因是我想通过api发送访问令牌给客户端,而不是秘密,并且我想减少缩进级别
您正在尝试初始化提升字段,这是复合文字无法实现的。从Go spec中:
如果 xf 是表示该字段或方法f的合法选择器,则将结构x中匿名字段的字段或方法f称为提升。 提升的字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。
如果 xf 是表示该字段或方法f的合法选择器,则将结构x中匿名字段的字段或方法f称为提升。
提升的字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。
但是您可以使用点符号来访问它们:
ra:= returnAccount{} ra.Tp = acnt.Tp