假设我有以下代码:
type User struct {
ID string
Username string
Name string
Password string
}
我想要做的是创建另一个结构,该结构可以访问User结构中的某些字段,而不是访问所有字段,以防止人们看到密码。 这不起作用:
type Note struct {
ID string
Text string
UserID User.ID
}
有没有办法做到这一点,或者我只是创建Note.UserID字段以使其与User结构中的ID具有相同的数据类型?
答案 0 :(得分:3)
The Go Programming Language Specification
可以导出标识符以允许从另一个标识符访问它 包。如果两者都导出标识符:
标识符名称的第一个字符是Unicode大写 字母(Unicode类“Lu”);和
标识符在包块中声明,或者是字段名称 或方法名称。
不会导出所有其他标识符。
给User
个自己的包,不要导出密码。
例如,
package user
type User struct {
ID string
Username string
Name string
password string
}
func (u *User) IsPassword(password string) bool {
return password == u.password
}
答案 1 :(得分:3)
假设类型在不同的包中,您可以通过导出vs不导出字段来完成此操作。不会导出以小写字母开头的字段,这意味着在声明/定义它的包之外不可见。因此,在这种情况下,如果用户存在于一个包中,则将其称为user
而将另一个类型在另一个包中声明,则可以完成此操作并隐藏'通过将定义更改为;
type User struct {
ID string
username string
name string
password string
}
如果这两种类型存在于同一个包中,则无法将字段设为私有/隐藏/等,所有内容都将在该范围内可用。