01.结构体和方法

news/2024/10/6 22:44:40/文章来源:https://www.cnblogs.com/JJJHaoran/p/18290975

结构体(Struct)和方法(Method)是 Go 语言中非常重要的概念,用于定义自定义类型和该类型的行为。让我们来看一下结构体和方法在 Go 中的基本用法和示例。

结构体(Struct)

结构体是一种用户自定义的数据类型,用于封装多个不同类型的数据字段。在结构体中,这些字段被称为结构体的成员(Fields)。

定义结构体

结构体通过 typestruct 关键字定义,如下所示:

package mainimport "fmt"// 定义结构体
type Person struct {Name   stringAge    intGender string
}func main() {// 创建结构体实例var p1 Personp1.Name = "Alice"p1.Age = 30p1.Gender = "Female"fmt.Println(p1) // 输出:{Alice 30 Female}// 另一种初始化方式p2 := Person{"Bob", 25, "Male"}fmt.Println(p2) // 输出:{Bob 25 Male}
}

匿名结构体

可以在定义时不指定结构体的名称,称为匿名结构体。通常用于临时数据结构的定义:

package mainimport "fmt"func main() {// 定义匿名结构体p := struct {Name   stringAge    intGender string}{Name:   "Alice",Age:    30,Gender: "Female",}fmt.Println(p) // 输出:{Alice 30 Female}
}

方法(Method)

方法是一种与结构体关联的函数,允许结构体实例执行特定的操作。在 Go 中,方法是通过将函数与特定类型关联而实现的。

定义方法

方法的定义与普通函数类似,但在函数名前面加上接收者(Receiver),即方法所属的结构体类型。

package mainimport "fmt"// 定义结构体
type Rectangle struct {Width  float64Height float64
}// 定义方法:计算面积
func (r Rectangle) Area() float64 {return r.Width * r.Height
}func main() {// 创建结构体实例rect := Rectangle{Width: 10, Height: 5}// 调用方法fmt.Println("Width:", rect.Width)fmt.Println("Height:", rect.Height)fmt.Println("Area:", rect.Area()) // 调用结构体的方法计算面积
}

在上面的例子中,Area() 方法属于 Rectangle 结构体,通过 (r Rectangle) 指定了该方法的接收者是 Rectangle 类型的实例 r。通过这种方式,可以在方法内部访问和操作结构体的字段。

小结

  • 结构体用于封装多个字段,定义自定义的复合数据类型。
  • 方法是与结构体关联的函数,允许对结构体实例进行操作和处理。
  • 使用结构体和方法可以更加灵活和清晰地组织代码,提高代码的可读性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740919.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计一次Win32 api程序显示混乱问题的调试经历

背景:短学期任务,做一个his系统,老师是没有要求gui的,我闲的没事干就打算写一个gui,但是mfc、qt、unity每一个熟悉的,所以就直接用了win32 api手写gui~~(我太难了,我发誓以后再也不手写gui了)~~。然后我就想到了子窗口切换的方式来显示不同的界面(好处在于,每个子界…

05.Map 案例 滑动区间算法

下面是 Go 语言实现寻找最长不含有重复字符的子串的代码:滑动区间算法??package mainimport "fmt"func longestSubstringWithoutRepeating(s string) string {m := make(map[byte]int)start, maxLength, maxStart := 0, 0, 0for end := 0; end < len(s); end++…

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法-模拟串口传感器和主机

本节课,我们主要讲解了在Python类的继承中子类如何进行初始化、调用父类的属性和方法,同时讲解了模拟串口传感器和主机类的具体实现,并使用xcom串口助手与两个类进行串口通信使用。全网最适合入门的面向对象编程教程:11 类和对象的 Python 实现-子类调用父类方法-模拟串口传…

Vite5+Electron聊天室|electron31跨平台仿微信EXE客户端|vue3聊天程序

基于electron31+vite5+pinia2跨端仿微信Exe聊天应用ViteElectronChat。 electron31-vite5-chat原创研发vite5+electron31+pinia2+element-plus跨平台实战仿微信客户端聊天应用。实现了聊天、联系人、收藏、朋友圈/短视频等模块。支持electron多开窗口管理、壁纸皮肤、自定义最大…

隐私计算核心技术

非对称加密算法 RSA RSA 算法基础欧拉函数:任意给定正整数 n,在小于等于 n 的正整数中,有多少个数与 n 构成互质关系?计算这些值的方法叫做欧拉函数,以 \(\varphi(n)\) 表示。 欧拉定理:如果两个正整数 a 和 n 互质,则 n 的欧拉函数可以让下面的等式成立:\[\begin{equa…

[Code Composer Studio] Memory Browser保存数据

造冰箱的大熊猫,适用于Code Composer Studio v5.5@cnblogs 2024/7/91、使用CCS>>View>>Memory Browser,可对目标板上的存储空间进行读写操作 2、要保存数据,在Memory Browser内,点击鼠标右键,在弹出的菜单中选择Save Memory 3、在Save Memory对话框中,在Fi…

[LeetCode] 135. Candy

和 238. Product of Array Except Self 计算除自己之外的乘积很像,先左侧遍历,再右侧遍历。 Hard不过如此。 class Solution:def candy(self, ratings: List[int]) -> int:# 1n = len(ratings)if n == 1:return 1# min element is not existif all(x == ratings[0] for x …

常用类

常用类 内部类 分类成员内部类 静态内部类 static 局部内部类 匿名内部类概念:在一个类的内部再定义一个完整的类 class Outer{class Inner{} }特点:编译之后可生成独立的字节码文件 (.class) 内部类可直接访问外部类的私有成员,而不破坏封装 可为外部类提供必要的内部…

一台 3000 元战未来主机装配方案

为了更好的阅读体验,请点击这里 下面是一个备选方案: CPU:酷睿I3 12100 四核八线程649 主板:微星H610M 爆破弹 金牌 569 内存:金百达16G 8GX2 3200 银爵 229 散热:赛普雷 涂城 双铜管散热器 49 固态:西数SN570 500G M2新蓝盘 249 显卡:UHD 730 电源:航嘉 GS400 好运来…

算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」参考 论文:https://arxiv.org/abs/2101.02118 更多内容,见微*公号往期文章: 审稿人:拜托,请把模型时间序列去趋势!! 使用 Python 快速上手 LSTM 模型预测时间序列…

Pandas我这个填充nan值为什么填充不上呢?

大家好,我是Python进阶者。 一、前言 前几天在Python钻石交流群【逆光】问了一个Python数据处理的问题,问题如下:请问一下,我这个填充nan值为什么填充不上呢二、实现过程 这里【瑜亮老师】给了个思路如下:试试看这样,代码如下: sf_mergetotal.loc[sf_mergetotal[寄件人]…

python matplot绘图工具练习

matplot 数据可视化 seaborn# pyplot import matplotlib.pyplot as plt import numpy as np import seaborn as sns import pandas as pdx_point = np.array([0,6]) y_point = np.array([0,100]) plt.plot(x_point,y_point,b-.v) # 格式处理 plt.show()x = np.arange(0,4…