创建结构体实例的四种方式 | 学习笔记

简介: 快速学习创建结构体实例的四种方式

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程创建结构体实例的四种方式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9670


创建结构体实例的四种方式

内容介绍:

一、创建结构体变量和访问结构体字段方式1

二、创建结构体变量和访问结构体字段方式2

三、创建结构体变量和访问结构体字段方式3

四、创建结构体变量和访问结构体字段方式4

 

一、创建结构体变量和访问结构体字段的方式1

直接声明(前一节内容,不过多叙述)

案例演示:var person Person

该创建变量与访问结构体的形式在前几节的讲述中已进行了详细地讲述与举例,故不在此进行过多讲解。

 

二、创建结构体变量和访问结构体字段的方式2

利用{}(推荐使用)

案例演示:var person Person = Person{}

新建一个文件夹,命名为 structcreate(结构体的创建),在文件夹中先写一个文件—main.go,将这部分的共用代码:

package main

import (

"fmt”"

)

粘贴过来。现有一个定义为 person 的结构体,其字段有 name(String 类型)、age(int 类型)。可以输入 :

p2:=Person{},

此时值是默认的;若输入:

p2.Name = "tom"与p2.Age =18

输入fmt.Println(p2)完成调用,此时运行效果显示为:

Name 为 tom、Age 为20岁。

根据赋值情况,程序会把值放到相应的字段里面并且在大括号里面直接给字段赋值,可以直接写入p2 := Person{"mary",20},由于第一个位置是字符串,可以输入marry( p2.Name = "tom")进行赋值,而 age 则可直接写入18( p2.Age =18)完成赋值。

核心代码:

p2:= Person{ "mary", 20}

// p2.Name = "tom"

// p2.Age =18

fmt.Println(p2)

 

三、创建结构体变量和访问结构体字段的方式3

利用&

案例:var person *Person = new (Person)

var p3*Person= new(Person)的标准写法应该写作:

(*p3).Name ="smith"

其中(*p3).Name ="smith"也可以这样写:

p3. Name = "smith",这是因为 go 的设计者为了程序员使用方便,会在编译底层对 p3,Name = "smith”进行处理,

给 p3 加上取值运算:

(*p3).Name = "smith"

若进行重新赋值,最终的运行结果为新赋值的内容,因为新赋值的内容会将之前的内容覆盖

核心代码:

//案例:var person*Person = new (Person)

var p3*Person= new(Person)

//因为 p3 是一个指针,因此标准的给字段赋值方式是:(*p3).Name = "smith"也可以这样写p3.Name = "smith",这是因为 go 的设计者为了程序员使用方便,底层会对p3.Name = "smith”进行处理,会给 p3 加上取值运算,即(*p3).Name = "smith"

(*p3).Name = "smith"

p3。Name = "john”//

(*p3).Age = 30

p3.Age = 100

fmt.Print1n(*p3)

四、创建结构体变量和访问结构体字段的方式4

利用-{}

案例:var person *Person = &Person{}

因为 person 是一个指针,因此访问字段的标准方法是:

(*person) .Name = "scott"、(*person).Age = 88。

go的设计者为了程序员使用方便,也可以把(*person) .Name = "scott"、(*person).Age = 88写成:

person.Name = "scott"和person.Age = 88,底层会对 person.Name = "scott"和person.Age = 88进行处理,加上:

(*person).Name = "scott"、(*person).Age = 88的运算;

也可以直接给字段赋值,写作var person *Person = & Person{" mary".60}

核心代码:

//案例:var person *Person = &Person{}

//下面的语句,也可以直接给字符赋值

//var person *person = &Person{"mary" , 6o}

var person *person = &Person{}

//因为 person 是一个指针,因此标准的访问字段的方法为:(*person). Name = "scott”,go 的设计者为了程序员使用方便,也可以 person.Name = "scott"

原因和上面一样,底层会对 person. Name = "scott”进行处理,会加上(*person)

(*person).Name = "scott"

person. Name = "scott~~"

(*person).Age = 88

person.Age = 10

fmt.Print1n(*person)

说明:第3种和第4种方式返回的是结构体指针类型,而结构体指针类型访问字段的标准方式应该是:(*结构体指针).字段名,比如(*person).Name = "tom"。但 go 语言做了一个简化,也支持结构体指针.字段名的访问形式,比如 person.Name = "tom",go编译器底层会对 person.Name 进行处理,将 person.Name 转化为(*person).Name,而这种简化后的访问形式更加符合程序员使用的习惯

相关文章
|
7月前
结构体实例
结构体实例。
32 4
|
7月前
|
关系型数据库 MySQL Go
工厂模式+自动注册管理Go多包结构体
工厂模式+自动注册管理Go多包结构体
171 1
|
5月前
|
Cloud Native
云原生部署问题之什么是结构体,并给出一个结构体的定义和初始化示例
云原生部署问题之什么是结构体,并给出一个结构体的定义和初始化示例
56 10
|
7月前
|
程序员 C语言
用户自定义结构体类型
用户自定义结构体类型
52 0
|
7月前
|
存储 安全 编译器
C++11(列表初始化,声明,范围for)
C++11(列表初始化,声明,范围for)
61 0
|
程序员 C++
C++程序设计函数部分(定义+实例)
C++程序设计函数部分(定义+实例)
60 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
400 0
C#反射与特性(五):主类型成员操作
|
编译器 C语言 C++
【C++学习】C++的动态内存管理 | new和delete的底层 | 初识模板
【C++学习】C++的动态内存管理 | new和delete的底层 | 初识模板
90 0
|
前端开发
前端学习案例4-类组件中绑定this指向的方式
前端学习案例4-类组件中绑定this指向的方式
73 0
前端学习案例4-类组件中绑定this指向的方式
|
存储 安全 程序员
【C++】C++11简介 | 列表初始化 | 声明 | 范围for
【C++】C++11简介 | 列表初始化 | 声明 | 范围for
【C++】C++11简介 | 列表初始化 | 声明 | 范围for