3.2 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			3.2 KiB
		
	
	
	
	
	
	
	
title, localeTitle
| title | localeTitle | 
|---|---|
| Go Structs | 去结构 | 
去结构
在Go中,结构用于存储数据和相关功能。一个示例可能是表示用户的结构:
type User struct { 
    FirstName string 
    LastName  string 
    Email     string 
    Age       int 
 } 
在这里,我们可以存储用户的名字,姓氏,电子邮件地址和年龄。该属性的名称后跟我们要存储的数据类型。例如, FirstName属性是一个string而Age属性是一个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... 
 } 
通过方法修改属性
要从其中一个方法中修改对象的数据,该对象必须是指针。示例可能如下所示:
```去 // SetEmail设置用户的电子邮件地址 func(u * User)SetEmail(电子邮件字符串){ u.email =电子邮件 }
//电子邮件访问者 func(u * User)Email()string { 返回u.email }
func main(){ //创建user1指针 user1 =&User { 名字:“约翰”, 姓氏:“威克”, }
// Set the user's email address 
 user1.SetEmail("john@wick.com") 
 
 // Access and print the user's email address 
 println(user1.Email()) 
}