首页 > 其他分享 >go语言结构体使用小结

go语言结构体使用小结

时间:2024-04-13 15:12:13浏览次数:30  
标签:语言 people Age Person go Name 小结 Email 结构

转载请注明出处:

  在Go语言中,结构体(struct)是一种复合数据类型,它允许你将多个不同类型的字段组合成一个单一的类型。结构体为数据的封装和抽象提供了便利,使得数据组织更加清晰和易于管理。

结构体的定义

  结构体的定义使用type关键字和struct类型,然后列出结构体的字段名和类型。

type Person struct {  
    Name string  
    Age  int  
    Email string  
}

  在这个例子中,定义了一个名为Person的结构体,它有三个字段:Name(字符串类型),Age(整型),和Email(字符串类型)。

结构体的实例化

  使用结构体类型来创建结构体变量,这通常被称为结构体的实例化。

// 使用字面量创建结构体实例  
p1 := Person{  
    Name: "Alice",  
    Age:  30,  
    Email: "alice@example.com",  
}  
  
// 使用字段名来设置值  
p2 := Person{  
    Name: "Bob",  
    Age:  25,  
}  
p2.Email = "bob@example.com"  
  
// 使用结构体类型创建变量,然后分别设置字段  
var p3 Person  
p3.Name = "Charlie"  
p3.Age = 35  
p3.Email = "charlie@example.com"

结构体的集合

  结构体集合通常指的是一个包含多个结构体实例的切片(slice)。

// 定义一个Person类型的切片  
var people []Person  
  
// 向切片中添加结构体实例  
people = append(people, p1)  
people = append(people, p2)  
people = append(people, p3)  
  
// 或者直接初始化一个包含多个实例的切片  
people = []Person{  
    {Name: "Alice", Age: 30, Email: "alice@example.com"},  
    {Name: "Bob", Age: 25, Email: "bob@example.com"},  
    {Name: "Charlie", Age: 35, Email: "charlie@example.com"},  
}

结构体的遍历

  使用for循环来遍历结构体切片。

// 遍历结构体切片  
for _, person := range people {  
    fmt.Printf("Name: %s, Age: %d, Email: %s\n", person.Name, person.Age, person.Email)  
}

  在这个循环中,range关键字用于迭代people切片中的每一个元素。_是一个空白标识符,用于忽略索引值,只获取切片中的元素。person是每次迭代时当前元素的副本,可以访问它的字段。

结构体方法和接收器

  在Go中,还可以为结构体定义方法,方法是一种特殊的函数,它关联到一个特定的类型上。方法的第一个参数是接收器(receiver),它指定了方法关联的类型。

func (p Person) SayHello() {  
    fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.Name, p.Age)  
}  
  
// 使用结构体方法  
p1.SayHello() // 输出: Hello, my name is Alice and I'm 30 years old.

  在上面的代码中,定义了一个名为SayHello的方法,它接收一个Person类型的接收器p。然后可以像调用普通函数一样调用这个方法,但是需要使用结构体实例来调用它。

 

标签:语言,people,Age,Person,go,Name,小结,Email,结构
From: https://www.cnblogs.com/zjdxr-up/p/18132882

相关文章

  • 52 Things: Number 42: Look at your C code for Montgomery multiplication above; c
    52Things:Number42:LookatyourCcodeforMontgomerymultiplicationabove;canyoudeterminewhereitcouldleaksidechannelinformation?52件事:数字42:看看上面蒙哥马利乘法的C码;你能确定它可能在哪里泄露侧通道信息吗? Thisisthelatestinaseriesofblog......
  • 【Django】
    https://www.djangoproject.com/MTVAnaconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D创建和管理虚拟环境,这些环境可以包含不同版本的Python和安装的包,这在数据科学工具的使用中非常有用;Pip没有内置支持环境隔离,需要依赖其他工具,如virtualenv或venv来......
  • 图像框切换图片-极语言
    比如我有两张图片3.bmp、4.bmp。 程序代码如下:程序段窗体消息(窗口,消息,参数,数据)判断(消息)为窗口关闭停止为单击左键{左键点击(参数)}处理窗口(窗口,消息,参数,数据)结束程序段窗体启动结束程序段按钮2_点击整数图片1=加载图像(0,"3.bmp",......
  • Go语言的100个错误使用场景(61-68)|并发实践
    目录前言9.并发实践9.1context的不恰当传播(#61)9.2开启一个协程但不知道何时关闭(#62)9.3在循环中没有谨慎使用协程(#63)9.4使用select和channel期待某个确定的行为(#64)9.5不使用用于通知的channel(#65)9.6不使用nilchannel(#66)9.7对channel的大小感到疑惑(#67)9.8忽视st......
  • Django Page not found at 问题排查
    1、确认请求路径是否正确,与setting.py中进行对比2、如果setting中路径是导入app中的路径,setting.py的路径需要是否正确,还要要看对应app下urls.py中的路径是否正确 3、如果是请求上传的图片,需要确认setting.py中配置文件路基没,如果配置了需要确认base_dir指向的路基是否正确......
  • c语言实验2
    TASK1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%65+1;printf("20238331%04d\n",number);}system(&qu......
  • windows下的重装是最笨也是最简单的重复解决问题的方法,解决goldendict的qt库链接问题
    goldendict✔goldendict:symbollookuperror:goldendict:undefinedsymbol:_ZN10QAudioSink12stateChangedEN6QAudio5StateE,versionQt_6~yay-Sgoldendict......
  • Linux无管理员权限,使用conda安装jupyter的R语言环境
    解决了2天,坑点满满,哭死......
  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码
    全文链接:http://tecdat.cn/?p=23061最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病数据集信息:目标:主......
  • 数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
    全文链接:https://tecdat.cn/?p=35835原文出处:拓端数据部落公众号分析师:YujieZhou,WeixinHu,XiaoyanXu,XuTian在数据驱动的当代社会,机器学习已成为揭示复杂现象、预测未来趋势的重要工具。特别是在商业决策、健康管理、交通出行等多个领域,机器学习技术的应用日益广泛。本文集合......