如何从Golang中的结构访问特定字段

时间:2016-02-16 22:34:00

标签: go struct

假设我有以下代码:

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具有相同的数据类型?

2 个答案:

答案 0 :(得分:3)

  

The Go Programming Language Specification

     

Exported identifiers

     

可以导出标识符以允许从另一个标识符访问它   包。如果两者都导出标识符:

     

标识符名称的第一个字符是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
}

如果这两种类型存在于同一个包中,则无法将字段设为私有/隐藏/等,所有内容都将在该范围内可用。