Go语言中结构体如何使用

结构体
Go语言中的基本数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候基本数据类型就无法满足需求了。
Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体(struct)。
我们可以通过struct来定义自己的类型了。
Go语言中通过struct来实现面向对象。
2.1结构体的定义
使用type和struct关键字来定义结构体,具体代码格式如下:

type 类型名 struct {
 字段名 字段类型
 字段名 字段类型
 …
}

其中:
类型名:标识自定义结构体的名称,在同一个包内不能重复。
字段名:表示结构体字段名。结构体中的字段名必须唯一。
字段类型:表示结构体字段的具体类型。
举个例子,我们定义一个Person结构体,代码如下:
type Person struct {
 name string
 city string
 age int8
}

同样类型的字段可以卸载一行
type Person struct {
 name,city string
 age int8
}

这样我们就拥有了一个Person的自定义类型,它有name,city,age三个字段,分别表示姓名,城市和年龄。
这样我们就能使用Person结构体存储人的信息了。

语言内置的数据类型是用来描述一个值得,结构体是用来描述一组值的。
比如一个人有名字,年龄和居住城市等,本质上是一种聚合型的数据类型。
2.2结构体实例化
只有当结构体实例化时,才会真正的分配内存。即必须实例化后才能使用结构体的字段。
结构体本身也是一种类型,我们可以像声明内置类型一样使用var关键字声明结构体类型。

var 结构体实例 结构体类型
2.2.1结构体基本实例化
通过"."来访问结构体的字段,例如person1.name和person1.age

package mainimport "fmt"type Person struct {    name,city string    age int8}func main() {    var person1 Person    person1.name="vita"    person1.city="ShangHai"    person1.age=27    fmt.Printf("p1=%v\n",person1)    fmt.Printf("p1=%#v\n",person1)}结果:p1={vita ShangHai 27}p1=main.Person{name:"vita", city:"ShangHai", age:27}Process finished with exit code 0

2.2.2匿名结构体
在定义一些临时数据结构时,可以使用匿名结构体。

package mainimport "fmt"func main() {    var person2 struct{name string;age int}    person2.name="vita"    person2.age=27    fmt.Printf("p1=%v\n",person2)    fmt.Printf("p1=%#v\n",person2)}结果:p1={vita 27}p1=struct { name string; age int }{name:"vita", age:27}Process finished with exit code 0

2.2.3创建指针类型结构体
我们还可以通过new关键字对结构体进行实例化,得到的是结构体的地址。
package main

import "fmt"
type Person struct {
 name string
 city string
 age int
}
func main() {
 var person3 = new(Person)
 fmt.Printf("%T\n",person3)
 fmt.Printf("p3=%#v\n",person3)
 person3.name="vita"
 person3.age=27
 fmt.Printf("p3=%v\n",person3)
 fmt.Printf("p3=%#v\n",person3)
}

结果:
*main.Person
p3=&main.Person{name:"", city:"", age:0}
p3=&{vita 27}
p3=&main.Person{name:"vita", city:"", age:27}

Process finished with exit code 0

从打印结果可以看到,p3是一个结构体指针。
Go语言中支持对结构体指针直接使用"."访问结构体成员。
2.2.4取结构体的地址实例化
使用&对结构体进行取地址操作相当于对该结构体进行了一次new实例化操作。

package mainimport "fmt"type Person struct {    name string    city string    age int}func main() {    var person4 = &Person{}    fmt.Printf("%T\n",person4)    fmt.Printf("p4=%#v\n",person4)    person4.name="vita"    person4.age=27    fmt.Printf("p4=%v\n",person4)    fmt.Printf("p4=%#v\n",person4)}结果:*main.Personp4=&main.Person{name:"", city:"", age:0}p4=&{vita  27}p4=&main.Person{name:"vita", city:"", age:27}Process finished with exit code 0

person4.name="vita"其实在底层是(* person4).name="vita",这是Go语言帮我们实现的语法糖。

原创文章,作者:UGGPQ,如若转载,请注明出处:https://www.beidanyezhu.com/a/28915.html

(0)
UGGPQ的头像UGGPQ
上一篇 2025-02-01
下一篇 2025-02-01

相关推荐

  • Go语言与鸭子类型的关系是什么

    Go语言与鸭子类型的关系   先直接来看维基百科里的定义:   If it looks like a duck, swims like a duck, and quacks lik…

  • Go语言的重要性

    一、Go 开发者 数量 & 所处地区 全球大约有 110 万名职业 Go 开发者(特指在工作中专门将 Go 作为主力编程语言的群体),如果把主要使用其他编程语言但同时兼职使…

    2025-02-05
  • Go语言中CGO怎么用

    1. Go语言调用C函数例子: package main   // // 引用的C头文件需要在注释中声明,紧接着注释需要有import &q…

    2025-02-05
  • Go语言能否取代Linux脚本

      在Cloudflare的人们都非常喜欢Go语言。我们在许多内部软件项目以及更大的管道系统中使用它。但是,我们能否进入下一个层次并将其用作我们最喜欢的操作系统Linux的脚本语言…

  • 什么是Go语言的字符串

      一个Go语言字符串是一个任意字节的常量序列。 Go语言字符串与其他语言不同点   Go语言字符串与其他语言(Java,C,Python)字符串的不同点Go语言中字符串的字节使用…

  • 为什么Go语言能够成功

      常言道,历史不会重演,但总会惊人的相似。   如果您想创建一种编程语言,多向那些有经验的人士学习,他们有很多可取之处。在《GoTime》第100期节目中,两位Go语言的创造者R…

  • go语言中函数与方法是什么

      如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的。   package math   func Sin(x float64) float //implemented …

  • GO语言的类型有哪些

    1、值的类型给编译器提供两部分信息:一是,需要分配多少内存给这个值(即值的规模);二是这段内存表示什么。 2、用户自定义类型有两种方法。一是使用关键字 struct ,来创建一个结…

    2025-02-05
  • 如何安装和使用Go语言集成开发环境的VS Code

    目录 Go语言集成开发环境之VS Code安装使用 下载与安装 安装中文简体插件 安装Go开发扩展 变更编辑器主题 安装Go语言开发工具包 配置VSCode开启自动保存 配置代码片…

    2025-02-05
  • Go语言的接口的介绍以及作用是什么

    接口就是一系列方法的集合(规范行为) 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为,规范子类对象的行为。 在 Go 语言中的接口是非侵入式接口(接口没了,不影响代码…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部