您的位置:首页 > 教育 > 锐评 > 动态表情包在线制作网站_百度竞价排名平台_百度推广后台登陆入口_百度扫一扫识别图片

动态表情包在线制作网站_百度竞价排名平台_百度推广后台登陆入口_百度扫一扫识别图片

2024/12/23 6:10:02 来源:https://blog.csdn.net/LuckyLay/article/details/144545503  浏览:    关键词:动态表情包在线制作网站_百度竞价排名平台_百度推广后台登陆入口_百度扫一扫识别图片
动态表情包在线制作网站_百度竞价排名平台_百度推广后台登陆入口_百度扫一扫识别图片

Golang学习笔记_09——if条件判断
Golang学习笔记_10——Switch
Golang学习笔记_11——指针


文章目录

    • 结构体
      • 1. 定义
      • 2. 访问 && 修改
      • 3. 零值初始化 & 使用指针初始化
      • 4. 匿名字段和嵌套结构体
      • 5. 结构体方法和接收者
    • 源码


结构体

Go语言中的结构体(struct)是一种复合数据类型,它允许你将多个不同类型的变量组合在一起。结构体在Go语言中非常常用,因为它提供了一种组织数据的强大方式,使代码更加清晰和模块化。

一个 结构体(struct)就是一组 字段(field)。

1. 定义

type Person struct {Name   stringAge    intStatus string
}
func StructDemo() {p1 := Person{Name:   "tom",Age:    20,Status: "ok",}p2 := Person{"Alice", 30, "Error"}fmt.Println(p1, p2) // 不用会报异常,简单打印下
}

2. 访问 && 修改

我们定义了一个名为Person的结构体,它有三个字段:Name(字符串类型)、Age(整型)和City(字符串类型)。通过点操作符(.)可以访问和修改这些字段的值。

func StructDemo2() {p := Person{Name:   "tom",Age:    20,Status: "ok",}fmt.Printf("Name: %s, Age: %d, Status: %s\n", p.Name, p.Age, p.Status)p.Status = "error"fmt.Printf("after fixed, Name: %s, Age: %d, Status: %s\n", p.Name, p.Age, p.Status)
}

测试方法

func TestStructDemo2(t *testing.T) {StructDemo2()
}

输出结果

=== RUN   TestStructDemo2
Name: tom, Age: 20, Status: ok
after fixed, Name: tom, Age: 20, Status: error
--- PASS: TestStructDemo2 (0.00s)
PASS

3. 零值初始化 & 使用指针初始化

func StructDemo3() {// 零值初始化var p3 Personvar p4 = &Person{"Alice", 30, "ok"}fmt.Printf("Name: %s, Age: %d, Status: %s\n", p3.Name, p3.Age, p3.Status)fmt.Printf("Name: %s, Age: %d, Status: %s\n", p4.Name, p4.Age, p4.Status)}

4. 匿名字段和嵌套结构体

type Address struct {Street stringCity   string
}type Employee struct {Name    stringAge     intAddress // 匿名字段
}func structDemo4() {e := Employee{Name: "Bob",Age:  40,Address: Address{Street: "123 Main St",City:   "San Francisco",},}// 访问嵌套结构体的字段fmt.Printf("Employee Name: %s\n", e.Name)fmt.Printf("Street: %s\n", e.Street) // 直接访问匿名字段中的字段
}

测试方法

func Test_structDemo4(t *testing.T) {structDemo4()
}

输出结果

=== RUN   Test_structDemo4
Employee Name: Bob
Street: 123 Main St
--- PASS: Test_structDemo4 (0.00s)
PASS

5. 结构体方法和接收者

Go语言允许为结构体定义方法。方法是与特定类型(通常是结构体类型)绑定的函数。定义方法时,需要在函数签名前加上该类型的接收者。接收者可以是值接收者(方法接收一个类型的值)或指针接收者(方法接收一个类型的指针)。

type Rectangle struct {Width, Height float64
}// 值接收者方法
func (r Rectangle) Area() float64 {return r.Width * r.Height
}// 指针接收者方法(修改结构体的值)
func (r *Rectangle) Scale(factor float64) {r.Width *= factorr.Height *= factor
}func StructDemo5() {r := Rectangle{Width: 3, Height: 4}fmt.Println("Area:", r.Area())r.Scale(2)fmt.Println("Scaled Area:", r.Area())
}

测试方法

func TestStructDemo5(t *testing.T) {StructDemo5()
}

输出结果

=== RUN   TestStructDemo5
Area: 12
Scaled Area: 48
--- PASS: TestStructDemo5 (0.00s)
PASS

源码

// struct_demo.go 文件
package struct_demoimport "fmt"type Person struct {Name   stringAge    intStatus string
}func StructDemo() {p1 := Person{Name:   "tom",Age:    20,Status: "ok",}p2 := Person{"Alice", 30, "ok"}fmt.Println(p1, p2)
}func StructDemo2() {p := Person{Name:   "tom",Age:    20,Status: "ok",}fmt.Printf("Name: %s, Age: %d, Status: %s\n", p.Name, p.Age, p.Status)p.Status = "error"fmt.Printf("after fixed, Name: %s, Age: %d, Status: %s\n", p.Name, p.Age, p.Status)
}func StructDemo3() {// 零值初始化var p3 Personvar p4 = &Person{"Alice", 30, "ok"}fmt.Printf("Name: %s, Age: %d, Status: %s\n", p3.Name, p3.Age, p3.Status)fmt.Printf("Name: %s, Age: %d, Status: %s\n", p4.Name, p4.Age, p4.Status)}
// struct_demo_test.go 文件
package struct_demoimport "testing"func TestStructDemo(t *testing.T) {StructDemo()
}func TestStructDemo2(t *testing.T) {StructDemo2()
}
// struct_demo2.go 文件
package struct_demoimport "fmt"type Address struct {Street stringCity   string
}type Employee struct {Name    stringAge     intAddress // 匿名字段
}func structDemo4() {e := Employee{Name: "Bob",Age:  40,Address: Address{Street: "123 Main St",City:   "San Francisco",},}// 访问嵌套结构体的字段fmt.Printf("Employee Name: %s\n", e.Name)fmt.Printf("Street: %s\n", e.Street) // 直接访问匿名字段中的字段
}
// struct_demo2_test.go 文件
package struct_demoimport "testing"func Test_structDemo4(t *testing.T) {structDemo4()
}
// struct_demo3.go 文件
package struct_demoimport "fmt"type Rectangle struct {Width, Height float64
}// 值接收者方法
func (r Rectangle) Area() float64 {return r.Width * r.Height
}// 指针接收者方法(修改结构体的值)
func (r *Rectangle) Scale(factor float64) {r.Width *= factorr.Height *= factor
}func StructDemo5() {r := Rectangle{Width: 3, Height: 4}fmt.Println("Area:", r.Area())r.Scale(2)fmt.Println("Scaled Area:", r.Area())
}
// struct_demo3_test.go
package struct_demoimport "testing"func TestStructDemo5(t *testing.T) {StructDemo5()
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com