Go 语言 - 结构体:初学者指南

你好,有抱负的程序设计者们!今天,我们将踏上一段令人兴奋的旅程,探索Go语言中的结构体世界。如果你之前从未编写过代码,不用担心——我将作为你友好的向导,我们会一步一步地探讨这个主题。那么,拿起一杯咖啡(或者如果你喜欢,一杯茶),让我们一起深入吧!

Go - Structures

Go 语言中的结构体是什么?

在我们开始之前,让我们先了解一下结构体是什么。想象你正在创建一个数字地址簿。对于每个联系人,你需要存储各种信息,比如姓名、电话号码和电子邮件地址。Go语言中的结构体允许你将这些相关的数据块组合在一起,并赋予它们一个单一的名字。这就像创建一个定制的数据类型,以满足你的特定需求。

现在,让我们用代码来实操一番!

定义结构体

在Go语言中定义结构体,我们需要使用type关键字,后面跟上结构体名称和struct关键字。以下是我们可能为数字地址簿定义的结构体:

type Contact struct {
Name        string
PhoneNumber string
Email       string
}

在这个例子中,我们创建了一个名为Contact的结构体,包含三个字段:NamePhoneNumberEmail,都是string类型。

让我们分解一下:

  • type告诉Go我们在定义一个新的类型
  • Contact是我们给结构体的名称
  • struct表示这个类型是一个结构体
  • 在大括号内,我们列出了我们的字段,每个字段都有自己的类型

访问结构体成员

现在我们定义了结构体,让我们创建一个它的实例并访问其成员:

func main() {
myFriend := Contact{
Name:        "Alice",
PhoneNumber: "123-456-7890",
Email:       "[email protected]",
}

fmt.Println("Name:", myFriend.Name)
fmt.Println("Phone:", myFriend.PhoneNumber)
fmt.Println("Email:", myFriend.Email)
}

以下是发生的事情:

  1. 我们创建了一个名为myFriend的新Contact
  2. 我们用特定的值初始化它的字段
  3. 我们使用点语法(myFriend.Name等)访问并打印每个字段

当你运行这段代码时,你会看到Alice的联系人信息被打印出来。这难道不酷吗?

结构体作为函数参数

当我们将结构体与函数一起使用时,它们变得更有力量。让我们创建一个函数来打印联系人的信息:

func printContact(c Contact) {
fmt.Printf("Name: %s\nPhone: %s\nEmail: %s\n", c.Name, c.PhoneNumber, c.Email)
}

func main() {
myFriend := Contact{
Name:        "Bob",
PhoneNumber: "098-765-4321",
Email:       "[email protected]",
}

printContact(myFriend)
}

在这个例子中:

  • 我们定义了一个名为printContact的函数,它接受一个Contact作为参数
  • main()函数中,我们为Bob创建了一个新的Contact
  • 我们将myFriend传递给printContact,它随后打印出Bob的信息

这种方法允许我们重用代码,并更有效地处理我们的数据。

指针与结构体

现在,让我们来谈谈指针。不要被这个术语吓到——指针只是存储另一个变量内存地址的变量。当我们想要修改原始数据时,它们与结构体特别有用。

以下是一个例子:

func updateEmail(c *Contact, newEmail string) {
c.Email = newEmail
}

func main() {
myFriend := Contact{
Name:        "Charlie",
PhoneNumber: "111-222-3333",
Email:       "[email protected]",
}

fmt.Println("更新前:", myFriend.Email)
updateEmail(&myFriend, "[email protected]")
fmt.Println("更新后:", myFriend.Email)
}

以下是分解过程:

  1. 我们定义了updateEmail函数,它接受一个指向Contact的指针和一个新的电子邮件地址
  2. main()中,我们为Charlie创建了一个Contact
  3. 我们打印Charlie的原始电子邮件
  4. 我们调用updateEmail函数,传递myFriend的地址和新的电子邮件
  5. 我们再次打印Charlie的电子邮件以查看更改

在函数调用中myFriend前的&符号给我们myFriend的内存地址,这是updateEmail中的指针所需要的。

使用指针允许我们直接修改原始的Contact,而不是处理副本。

Go语言中的方法

以下是一些在Go语言中与结构体一起使用的常见方法:

方法 描述 示例
定义 在结构体上定义方法 func (c Contact) FullName() string
接收器 方法关联的结构体 (c Contact)在上述示例中
指针接收器 允许方法修改结构体 func (c *Contact) UpdateEmail(newEmail string)
方法调用 如何在结构体上调用方法 myFriend.FullName()

结论

恭喜你!你已经踏入了Go语言结构体的世界。我们已经覆盖了如何定义结构体、访问它们的成员、将它们与函数一起使用,甚至初步了解了指针。

记住,学习编程就像学习一门新语言——它需要练习和耐心。如果一切不是立刻就能理解,不要气馁。继续尝试这些概念,尝试创建你自己的结构体,最重要的是,享受这个过程!

在我多年的教学经验中,我发现那些享受学习过程的学

Credits: Image by storyset