人生苦短我使用GO——GO结构体

目录

前言

        定义结构体

        访问结构体成员

结构体作为函数参数

        结构体指针

                判断结构体是值类型还是引用类型


前言

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

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

        结构体表示一项记录,比如班级的学生信息,每个人有以下属性:

Name :姓名 ·

Sex :性别

Age:年龄

·lD card:身份证

        定义结构体

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

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

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

—旦定义了结构体类型,它就能用于变量的声明,

语法格式如下:

variable_name := structure_variable_type {value1,value2. . . valuen}
或
variable_name :m 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{"zhangsan","男",20,12345678903})
//也可以使用key => value格式
​
    fmt.Println(Person{name: "lisi" , sex: "女" ,age: 18,id_card: 6495407345})
//忽略的字段为日或空
    fmt . Println(Person{name: "wangwu", sex:“未知})
}
​
运行结果

运行结果:
{zhangsan 男 20 1234567890}
{lisi 女 18 6495407345}
{wangwu 未知 0 0}
 

        访问结构体成员

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

结构体.成员

示例:结构体类型变量使用struct 关键字定义。

package main
import "fmt"
type Person struct {
​
    name string
    sex string
    age int
    id_card int
}
func main (){
​
    var Person1 Person /*声明Person1为Persons类型*/
    var Person2 Person/*声明Person2为Persons类型
    
    /* Person 1描述*/
​
    person1.name = "zhangsan""
    Person1.sex ="男"
    Person1.age = 18
    Person1.id_card = 6495407335
    
    /* Person 2描述*/
​
    Person2.name = "lisi",
    Person2.sex ="女”
    Person2.age = 20
    Person2.id_card = 1234567898
​
    /*打印Person1 信息.*/
​
    fmt.Printf("Person1 name : %s\n",Person1.name)
    fmt.Printf("Person1 sex : %s\n",Person1.sex)
    fmt.Printf("Person1 age : %d\n", Person1.age)
​
    fmt .Printf("Person1 id_card : %d\n", Person1.id_card)
    
    /*打印 Person2信息*/
​
    fmt.Printf("Person2 name : %s\n",Person2.name)
    fmt.Printf("Person2 sex : %s\n",Person2.sex)
    fmt.Printf( "Person2 age : %d\n",Person2.age)
    fmt .Printf("Person2 id_card : %d\n", Person2.id_card)
​
}
运行结果

Person 1 name : zhangsan
Person 1 sex :男
Person 1 age : 18
Person 1 id_card : 6495407335
​
Person 2 name : lisi
Person 2 sex :女
Person 2 age : 20
Person 2 id_card : 1234567890

结构体作为函数参数

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

package main
​
import "fmt"
​
type Classinfo struct {
    Name    string
    Age     int
    sex     string
    id_card int
}
​
func main() {
    var (
        class1 Classinfo
        class2 Classinfo
    )
    class1.Name = "tom"
    class1.Age = 23
    class1.sex = "man"
    class1.id_card = 13435464
​
    class2.Name = "aili"
    class2.Age = 21
    class2.sex = "women"
    class2.id_card = 14354655
​
    Classinfo1(class1)
    Classinfo1(class2)
}
​
func Classinfo1(clas Classinfo) {
    fmt.Println("姓名:", clas.Name)
    fmt.Println("年龄:", clas.Age)
    fmt.Println("性别", clas.sex)
    fmt.Println("身份证号:", clas.id_card)
}
运行结果

姓名: tom
年龄: 23
性别 man
身份证号: 13435464
姓名: aili
年龄: 21
性别 women
身份证号: 14354655

        结构体指针

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

var struct_pointer *Books

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

struct_pointer = &Book1

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

struct_pointer.title

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

package main
​
import "fmt"
​
type Books struct {
   title string
   subject string
   book_id int
}
​
func main() {
   var Book1 Books        /* 声明 Book1 为 Books 类型 */
   var Book2 Books        /* 声明 Book2 为 Books 类型 */
​
   /* book 1 描述 */
   Book1.title = "Go 语言"
   Book1.subject = "GO"
   Book1.book_id = 123456
​
   /* book 2 描述 */
   Book2.title = "Python 语言"
   Book2.subject = "Python"
   Book2.book_id = 456789
​
   /* 打印 Book1 信息 */
   printBook(&Book1)
​
   /* 打印 Book2 信息 */
   printBook(&Book2)
}
func printBook( book *Books ) {
   fmt.Printf( "Book title : %s\n", book.title)
   fmt.Printf( "Book subject : %s\n", book.subject)
   fmt.Printf( "Book book_id : %d\n", book.book_id)
}
以上实例执行运行结果为:
​
Book title : Go 语言
Book subject : Go 
Book book_id : 123456
Book title : Python 语言
Book subject : Python
Book book_id : 456789

                判断结构体是值类型还是引用类型

package main
​
import "fmt"
​
//结构体声明
type Person struct {
    name    string
    sex     string
    age     int
    id_card int
}
​
/*结构体定义*/
func main() {
​
    //结构体类型的变量
    var (
        person1 Person
    )
    //给person1赋值
    person1.name = "tom"
    person1.sex = "man"
    person1.age = 30
    person1.id_card = 123456
​
    fmt.Println("处理前:", person1)
​
    updateInfo(&person1)
​
    fmt.Println("处理后:", person1)
​
}
​
//函数定义结构体为形式参数进行传入
func updateInfo(per *Person) {
    per.name = "jack"
}
运行结果

转化前: {tom 20 男 134353}
转化之后: {jack 21 未知 654321}

由此可知结构体是引用类型

晚安

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柏ぁ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值