Go语言结构体

基本介绍

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

基本使用

定义结构体

结构体定义需要使用 type 和 struct 语句。
struct 语句定义一个新的数据类型,结构体中有一个或多个成员。

	type Person struct {
		Name string
		Age int
	}

结构体初始化

  1. 按照顺序给相对应的字段赋值
  2. 使用这种方式初始化结构体,必须初始化所有字段
	p1 := Person{
		"wuhenzhiyi1",
		20,
	}
	fmt.Println(p1)
  1. 显示用字段名来赋值
  2. 使用这种方式初始化,可以省略某些字段,省略的字段默认是类型的零值
	p2 := Person{
		Name: "wuhenzhiyi2",
		Age:20,
	}
	fmt.Println(p2)

一般来说我们都用第二种,更加清晰明了也不容易出错

访问结构体成员

我们可以用 . 来访问结构体的成员

	fmt.Println(p1.Name) // wuhenzhiyi1
	fmt.Println(p1.Age) // 20
	fmt.Println(p2.Name) // wuhenzhiyi2
	fmt.Println(p2.Age) // 20

结构体成员赋值

	p1.Name = "wuhenzhiyi3"
	fmt.Println(p1.Name) // wuhenzhiyi3

结构体方法

我们不仅可以给结构体设置成员,还可以给结构体设置方法,类似面向对象类的方法。

  1. 通过在方法前面写上需要接收的结构体类型,就可以给这个结构体设置一个方法。
  2. 访问结构体的方法也是通过 . 的方法
	type Person struct {
		Name string
		Age int
	}
	
	func (p Person) say(){
		fmt.Printf("my name is %s\n",p.Name)
	}

	func main(){
		p1 := Person{
			"wuhenzhiyi1",
			20,
		}
		p1.say() // my name is wuhenzhiyi1
	}

结构体嵌套

结构体里面还可以嵌套结构体类型,达到复用结构体的作用。

	type Person struct {
		Name string
		Age int
		Work Work
	}

	type Work struct {
		Profession string
	}

	p3 := Person{
		Name: "wuhenzhiyi2",
		Age:20,
		Work: Work{
			Profession: "go",
		},
	}
	fmt.Println(p3)//{wuhenzhiyi2 20 {go}}
	fmt.Println(p3.Work.Profession) // go

注意事项

  1. 结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存。
  2. 结构体的所有字段在内存中是连续的。
  3. 使用 . 来访问结构体的成员变量,结构体成员变量的赋值与普通方法一致。
  4. 使用 new 关键字对类型进行实例化,创建指针类型的结构体。
  5. 取结构体的地址实例化,使用 &
  6. 匿名结构体没有类型名称,无须通过 type 关键字定义就可以直接使用

相关推荐

  1. Go语言结构

    2024-04-28 16:40:05       9 阅读
  2. Go语言结构

    2024-04-28 16:40:05       11 阅读
  3. go语言Map与结构

    2024-04-28 16:40:05       28 阅读
  4. 解密Go语言结构:构建数据之美

    2024-04-28 16:40:05       40 阅读
  5. 2.Go的基本语法-指针、结构、Map

    2024-04-28 16:40:05       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 16:40:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 16:40:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 16:40:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 16:40:05       20 阅读

热门阅读

  1. go 映射(Map)使用注意事项

    2024-04-28 16:40:05       12 阅读
  2. 【MySQL】——用户和权限管理(一)

    2024-04-28 16:40:05       9 阅读
  3. 「PHP系列」PHP 发送电子邮件详解

    2024-04-28 16:40:05       15 阅读
  4. uniapp 基础阿里云点播 使用

    2024-04-28 16:40:05       12 阅读
  5. Es6和Es5的区别?

    2024-04-28 16:40:05       11 阅读
  6. php 手机号加星号

    2024-04-28 16:40:05       11 阅读
  7. 什么是CDA数据分析师认证考试?

    2024-04-28 16:40:05       27 阅读
  8. springboot中多线程问题的优化和处理

    2024-04-28 16:40:05       12 阅读