ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

go 语言结构体

2022-03-29 16:32:11  阅读:139  来源: 互联网

标签:语言 fmt name person2 age person1 go id 结构


go语言结构体

目录

Go 语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

  • Title :标题
  • Author : 作者
  • Subject:学科
  • ID:书籍ID

定义结构体

结构体定义需要使用 type 和 struct 语句。

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

type 语句设定了结构体的名称。结构体的格式如下:

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

//赋值时,前后顺序不能颠倒
variable_name := structure_variable_type {value1, value2...valuen}
或
//k:v 结构,顺序可以改变
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

实例如下:

package main

import "fmt"

//结构体声明
type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

func main() {
  //按顺序进行初始化
	fmt.Println(Person{"zhangsna", "男", 20, 12345})

	//也可以使用  key : value 的格式
	fmt.Println(Person{name: "lili", sex: "女", age: 20, id_card: 123123})

	//忽略的字段为 该数值类型的默认值
	fmt.Println(Person{name: "wangwu", age: 18})
}


//输出结果:
{zhangsna 男 20 12345}
{lili 女 20 123123}
{wangwu  18 0}

访问结构体成员

如果要访问结构体成员,需要使用点号 . 操作符,格式为:

结构体.成员名

结构体类型变量使用 struct 关键字定义,实例如下:

package main

import "fmt"

type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

func main() {
	//结构体类型变量
	var (
		person1 Person
		person2 Person
	)

	//给person1进行赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 30
	person1.id_card = 123

	//给person2进行赋值
	person2.name = "jerry"
	person2.sex = "man"
	person2.age = 25
	person2.id_card = 456

	//打印person1信息
	fmt.Println(person1)
	fmt.Printf("persion1 name: %s\n", person1.name)
	fmt.Printf("persion1 sex: %s\n", person1.sex)
	fmt.Printf("persion1 age: %d\n", person1.age)
	fmt.Printf("persion1 id_card: %d\n", person1.id_card)

	fmt.Println("---------")

	//打印person2信息
	fmt.Println(person2)
	fmt.Printf("persion2 name: %s\n", person1.name)
	fmt.Printf("persion2 sex: %s\n", person1.sex)
	fmt.Printf("persion2 age: %d\n", person1.age)
	fmt.Printf("persion2 id_card: %d\n", person1.id_card)
}

//输出结果:
{tom man 30 123}
persion1 name: tom
persion1 sex: man
persion1 age: 30
persion1 id_card: 123
---------
{jerry man 25 456}
persion2 name: tom
persion2 sex: man
persion2 age: 30
persion2 id_card: 123


结构体作为函数参数

你可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变量:

package main

import "fmt"

type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

func main() {
	//结构体类型变量
	var (
		person1 Person
		person2 Person
	)

	//给person1进行赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 30
	person1.id_card = 123

	//给person2进行赋值
	person2.name = "jerry"
	person2.sex = "man"
	person2.age = 25
	person2.id_card = 456

	//使用函数传参结构体类型数据
	printInfo(person1)
	fmt.Println("---------")
	printInfo(person2)
}

//函数定义结构体 为形式参数,进行传入
func printInfo(per Person) {
	fmt.Println("姓名:", per.name)
	fmt.Println("性别:", per.sex)
	fmt.Println("年龄:", per.age)
	fmt.Println("id:", per.id_card)
}


//输出结果:
姓名: tom
性别: man
年龄: 30
id: 123
---------
姓名: jerry
性别: man
年龄: 25
id: 456

结构体指针

你可以定义指向结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Person

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

struct_pointer = &person1

使用结构体指针访问结构体成员,使用 点"." 操作符:

struct_pointer.title

接下来让我们使用结构体指针重写以上实例,代码如下:

package main

import "fmt"

type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

func main() {
	//结构体类型变量
	var (
		person1 Person
		person2 Person
	)

	//给person1进行赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 30
	person1.id_card = 123

	//给person2进行赋值
	person2.name = "jerry"
	person2.sex = "man"
	person2.age = 25
	person2.id_card = 456

	//使用函数传参结构体类型数据
	printInfo(&person1)
	fmt.Println("---------")
	printInfo(&person2)
}

//函数定义结构体 为形式参数,进行传入
func printInfo(per *Person) {
	fmt.Println("姓名:", per.name)
	fmt.Println("性别:", per.sex)
	fmt.Println("年龄:", per.age)
	fmt.Println("id:", per.id_card)
}


//输出结果:
姓名: tom
性别: man
年龄: 30
id: 123
---------
姓名: jerry
性别: man
年龄: 25
id: 456

标签:语言,fmt,name,person2,age,person1,go,id,结构
来源: https://www.cnblogs.com/zhijiyiyu/p/16072543.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有