go结构


在Go中,结构用于存储数据和相关功能。一个示例可能是表示用户的结构:

type User struct {
    FirstName string
    LastName  string
    Email     string
    Age       int
 }

在这里,我们可以存储用户的名字,姓氏,电子邮件地址和年龄。该属性的名称后跟我们要存储的数据类型。例如, FirstName属性是一个stringAge属性是一个int

创建对象

要初始化一个新对象,我们可以使用Go简写语法来创建和分配变量。我们可以在此时传递数据,也可以在以后设置数据:

func main() {
    // Create a user and set both the first and last name properties
    user1 := User{
        FirstName: "John",
        LastName: "Wick",
    }

    // Now we have our user object, we can set the data like this
    user1.Email = "john@wick.com"
    user1.Age = 30
 }

对象方法

Go允许将方法分配给结构。这样可以将相关操作分组到它所影响的数据中。在这个例子中,我们将在User结构上编写一个方法来生成User的全名:

func (u User) FullName() string {
    return strings.Join([]string{u.FirstName, u.LastName}, " ")
 }

此方法将连接用户的名字和姓氏,其间有空格。调用方法可能如下所示:

println(user1.FullName())

结构标签

Struct标记用于修改编码器处理数据的方式。例如,在编码为JSON时设置键名:

type User struct {
    FirstName string `json:"first_name"`
    LastName  string `json:"last_name"`
    Email     string `json:"email"`
    Age       int    `json:"age"`
 }

导出数据

结构可以包含导出(公共)和未导出(私有)属性。这是通过导出的大写首字母或未导出的小写首字母来设置的。在此示例中,我们将使电子邮件属性为私有:

type User struct {
    // Exported Data
    FirstName string
    LastName  string
    Age       int

    // Unexported Data
    email     string
 }

执行此操作将使以下代码在构建时抛出错误,因为它尝试与未导出的属性进行交互:

user1.email = "john@wick.com"

这也适用于方法:

// Exported method. This can be called from anywhere
 func (u User) Email() {
    return u.email
 }

 // Unexported method. This can only be called by other methods on this struct
 func (u User) updateLoginCount {
    // code to update login count...
 }

通过方法修改属性

要从其中一个方法中修改对象的数据,该对象必须是指针。示例可能如下所示:

```go // SetEmail sets the user's email address func (u *User) SetEmail(email string) { u.email = email }

// Email accessor func (u *User) Email() string { return u.email }

func main() { // Creating the user1 pointer user1 = &User{ FirstName: "John", LastName: "Wick", }

// Set the user's email address
user1.SetEmail("john@wick.com")

// Access and print the user's email address
fmt.println(user1.Email())

}

更多go教程

学习更多go教程