【go从零单排】go中的结构体struct和method

devtools/2024/11/8 18:17:23/

挪威特罗姆瑟夜景

Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

概念

struct

在Go语言中,结构体(struct)是一种用户定义的数据类型,用于将相关的数据组合在一起。
结构体可以包含多个字段,每个字段可以具有不同的数据类型。
结构体是Go语言中组织和管理数据的基本方式之一。

代码

struct

package mainimport "fmt"// 在代码中定义了一个名为 person 的结构体,包含两个字段:name(字符串类型)和 age(整数类型)
type person struct {name stringage  int
}// 定义构造函数newPerson,输入一个string,输出person结构体的指针
func newPerson(name string) *person {//定义变量,把person的name字段设置为传入的name,赋值给pp := person{name: name}p.age = 42 //p的age设置为42return &p  //返回p的内存地址
}func main() {//创建一个新的结构,按位置赋值fmt.Println(person{"Bob", 20})//创建一个新的结构,按字段名称赋值fmt.Println(person{name: "Alice", age: 30})//只赋值name,age不赋值时会被初始化为0fmt.Println(person{name: "Fred"})//用&表示指针,打印结果带有&fmt.Println(&person{name: "Ann", age: 40})//在构造函数中初始化结构fmt.Println(newPerson("Jon"))//使用.name访问结构体字段s := person{name: "Sean", age: 50}fmt.Println(s.name)//把.与结构体指针一起使用,指针会自动取消引用,这里会输出age的值sp := &sfmt.Println(sp.age)//结构体是可变的,这里改变age的值sp.age = 51fmt.Println(sp.age)//创建dog结构体,字段为name string类型,isGood 布尔类型//注意这里省略了type,直接用dog并赋值dog := struct {name   stringisGood bool}{"Rex",true,}//上面的代码为匿名结构体,临时使用一次或者测试时用fmt.Println(dog)
}

method

package mainimport "fmt"// 定义结构体
type rect struct {width, height int
}// 定义方法area,输入为指向rect结构体的指针,输出一个int
func (r *rect) area() int {return r.width * r.height //计算面积
}// 注意看这里没有*,输入为rect结构体
func (r rect) perim() int {return 2*r.width + 2*r.height //计算周长perim
}func main() {//给结构体r赋值r := rect{width: 10, height: 5}fmt.Println("area: ", r.area())fmt.Println("perim:", r.perim())//变量rp赋值为指向r的指针,这样做可以避免改变r的结构体rp := &rfmt.Println("area: ", rp.area())fmt.Println("perim:", rp.perim())
}

嵌套struct

package mainimport "fmt"// 定义address结构体
type Address struct {City    stringState   stringZipCode string
}// 定义person结构体,嵌套了address
type Person struct {Name    stringAge     intAddress Address // 嵌套结构体
}func main() {person := Person{Name: "David",Age:  40,//这里可以直接使用嵌套的结构Address: Address{City:    "New York",State:   "NY",ZipCode: "10001",},}fmt.Println(person.Address.City) // 输出: New York
}

理解

  • 结构体的定义使用 type 关键字,后跟结构体名称和字段的定义。字段的定义包括字段名和字段类型。
  • 如果结构体只有一次使用,比如测试时,可以不给结构体名称,直接赋值
  • 通过点(.)操作符访问结构体的字段
  • go支持在结构类型上定义method,意味着可以使用创建的结构体作为输入/输出
  • 可以使用嵌套struct

无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.ppmy.cn/devtools/132372.html

相关文章

汇聚全球前沿科技产品,北京智能科技产业展览会·世亚智博会

在北京这座古老而又充满现代气息的城市中,一场科技与创新的盛宴正悄然上演——北京智能科技产业展览会(简称:世亚智博会),作为全球前沿科技的汇聚地,不仅展示了人工智能、5G通信、虚拟现实等尖端技术的最新…

【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!

数据集介绍 【数据集】道路事故识别数据集 8939 张,目标检测,包含YOLO/VOC格式标注。数据集中包含2种分类:{0: accident, 1: non-accident}。数据集来自国内外图片网站和视频截图。检测范围道路事故检测、监控视角检测、无人机视角检测、等&…

解析Go切片:为何按值传递时会发生改变?|得物技术

一、前言 在Go语言中,切片是一个非常常用的数据结构,很多开发者在编写代码时都会频繁使用它。尽管切片很方便,但有一个问题常常让人感到困惑:当我们把切片作为参数传递给函数时,为什么有时候切片的内容会发生变化&…

嵌入式之C语言(基础篇)

首先,我们要知道什么是程序。程序:为了让计算机执行某操作或解决某个问题而编写的一系列有序指令的集合。 一、计算机语言简史 第一代是机器语言:时间实在1946年,第一台计算机ENIAC诞生,用的是穿孔卡片做的&#xff0c…

libuv的调用例子

(来自文心一言) Libuv 是一个多平台的异步 I/O 库,旨在提供事件驱动的编程模型,类似于 Node.js 的底层机制。以下是一个简单的例子,展示了如何使用 libuv 来创建一个 TCP 服务器和客户端。 首先,确保你已…

Python Numpy中的广播的含义(Numpy Broadcasting)

Numpy数组之间进行运算时,通常是逐元素之间进行运算,这通常要求数组具有相同的形状。而“广播(Broadcasting)”机制降低了这个限制,只需要满足一定的条件,形状不同的数组也可以进行运算,小数组会…

软件测试—功能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产…

求解优化问题算法探讨与分析

一、分枝定界法:强大的优化求解工具 (一)起源与发展 分枝定界法由查理德・卡普在 20 世纪 60 年代发明,当时成功求解了含有 65 个城市的旅行商问题,创下了记录。此后,该方法被广泛应用于整数规划问题、生…