【go语言】结构体

news2024/11/15 21:53:46

结构体

结构体定义

type name struct{
    value1 type1
    value2 type2
    ......
}

组成结构体的数据称为字段,每一个字段有一个类型和一个名字,每一个字段的名字必须唯一,字段的类型任意。

创建结构体

type myStruct struct{
    i1 int
    f1 float32
    str string
}
  1. 使用new
    ms:=new(myStruct)
  2. 使用结构体字面量
    var ms myStruct
  3. 间接使用new创建
    ms:=&msStruct{10,1.1,"string"}

初始化结构体

ms:={1,1.1,“string”}
这种方法初始化必须按照字段在结构体定义是的顺序填写

ms:={i2:2.5,str:“hhh”}
这种方法指定某些字段的值,不必按照顺序,而且一些字段可以被忽略

使用结构体

import(
    "fmt",
    "string"
)
type Person struct{
	firstName string
	lastName string
}
func upPerson(p *Person){
	p.firstName=strings.ToUpper(p.firstName)
	p.lastName=strings.ToUpper(p.lastName)
}
func main(){
    var per1 Person
	per1.firstName="zhang"
	per1.lastName="sang"
	upPerson(&per1)
	fmt.Printf("这个人的名字是%s %s\n",per1.firstName,per1.lastName)

	per2:=new(Person)
	per2.firstName="zhang"
	per2.lastName="sang"
    upPerson(&per2)
	fmt.Printf("这个人的名字是%s %s\n",per2.firstName,per2.lastName)

	per3:=&Person{"zhang","sang"}
    upPerson(per3)
	fmt.Printf("这个人的名字是%s %s\n",per3.firstName,per3.lastName)
}

在这里插入图片描述
注意
由于go的类型转换规则非常严格,当给一个结构体a取别名b时,就要进行类型转换

type number struct{
		f int
	}
	type nb number

	a:=number{1}
	b:=nb{2}
	a=b
	//取了别名就不能直接赋值了a=b
    //需要类型转换
    //a=number(b)
	fmt.Println(a)

在这里插入图片描述

结构体中的匿名字段

匿名字段就是没有名字只有类型的字段,在一个结构体中一种类型只能有一个匿名字段。

通过这个可以模拟类似继承的行为

type first struct{
    f1 int
    f2 int
}
type second struct{
    s1 int
    s2 int
    first
}
func main(){
    sec:=new(second)
    sec.s1=1
    sec.s2=2
    sec.f1=3
	sec.f2=4
	fmt.Println(sec)
}

在这里插入图片描述

命名冲突

当一个结构体中两个字段有相同的名字的时候就会发生命名冲突(通过匿名字段实现继承的时候)
比如下面这几个例子

  • 相同名字在同层次结构体中出现
type A struct{
    a int
}
type B struct{
    a int
    b int
}
type C struct{
    A
    B
}
var c C
c.a

使用c.a就会报错,因为编译器分不清是c.A.a还是c.B.a
在这里插入图片描述

  • 相同名字字段在不同结构体层次出现
type D struct{
    B
    b float32
}
var d D
d.b

这里使用d.b就没有问题,d.b和d.B.b是可以区分的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件测试】开发/测试模型

开发/测试模型 瀑布模型 设计:技术文档(设计那些接口,库表,mq,定时任务),UI视觉稿 特点:线性的结构。 优点:每个阶段做什么,产出什么非常清晰 缺点:测试人员介入太晚…

了解CISP,看这篇文章就够了,附上CISP证书题库资料

前言 【点击此处领取CISP题库资料和网络安全学习资】 什么是CISP? CISP是中国信息安全测评中心依据中编办赋予的职能,建立和发展的一整套完整的信息安全保障人才培训体系,从2002年开始启动。 CISP (CertifiedInformation Security Profes…

分享55个C源码源代码总有一个是你想要的

分享55个C源码源代码总有一个是你想要的 链接:https://pan.baidu.com/s/1_zbaunqvmYRhCiX7hbiqmg?pwd8888 提取码:8888 1. 项目名称 apachesubversion版本控制系统 v1.10.3 Ceph分布式文件系统 v17.2.5 clip命令行插图处理器 v0.8 curve分布式存…

在前端设计中,子元素的基线和父元素的基线分别是什么意思?并利用Bootstrap的类align-items-baseline实现子元素在其父容器内基线对齐。

子元素的基线和父元素的基线是用于文本对齐的重要概念。让我解释一下它们分别指的是什么: 子元素的基线(Baseline of Child Elements): 子元素的基线是指子元素内文本的底部边缘,特别是字母的底部边缘。在包含文本的元…

医药行业电力供应3大难题?教你如何破解

电力是现代社会不可或缺的基础设施之一,它支持着工业、商业和生活的各个方面。在这个数字化、电气化的时代,电力配电系统扮演着关键的角色,确保电能以可靠、高效、安全的方式分发到我们的家庭、企业和工厂。 然而,要保持电力分配的…

LeetCode 518.零钱兑换II 动态规划 + 完全背包 + 组合数

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例…

DevOps持续集成与交付

概述 Jenkins是一个支持容器化部署的、使用Java运行环境的开源软件,使用Jenkins平台可以定制化不同的流程与任务、以自动化的机制支持DevOps领域中的CI与CD,在软件开发与运维的流程中自动化地执行软件工程项目的编译、构建、打包、测试、发布以及部署&a…

FileManager/本地文件增删改查, Cache/图像缓存处理 的操作

1. FileManager 本地文件管理器,增删改查文件 1.1 实现 // 本地文件管理器 class LocalFileManager{// 单例模式static let instance LocalFileManager()let folderName "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func cr…

在英文电脑系统中,中文显示??????

如果操作系统是英文的,那么无论是在cmd界面,还是在Visual Studio的调试界面,中文显示都是一串问号??????? 这是因为在英文系统中,Console 的默认代码页是 437(OEM -United States),不支持中文输入输出&#xff…

照片后期处理软件DxO FilmPack 6 mac中文说明

DxO FilmPack 6 for Mac是一款照片后期处理软件。它可以模拟超过60种著名胶片品牌和类型的色彩和颗粒感,使照片具有复古、艺术和时尚风格。 ​DxO FilmPack 6 mac支持RAW和JPG格式的照片,并提供丰富的调整选项,如亮度、对比度、曝光、阴影和高…

十六.镜头知识之工业镜头的质量判断因素

十六.镜头知识之工业镜头的质量判断因素 文章目录 十六.镜头知识之工业镜头的质量判断因素1.分辨率(Resolution)2.明锐度(Acutance)3.景深(DOF):4. 最大相对孔径与光圈系数5.工业镜头各参数间的相互影响关系5.1.焦距大小的影响情况5.2.光圈大小的影响情况5.3.像场中…

【Java 进阶篇】深入理解SQL查询语言(DQL)

SQL(Structured Query Language)是一种用于管理关系型数据库的强大编程语言。它提供了各种命令和语句,用于执行各种操作,包括数据查询、插入、更新和删除。本文将深入探讨SQL查询语言(DQL),它是…

Bootstrap的弹性盒子布局学习笔记

Bootstrap的弹性盒子布局学习笔记 目录 01-综述02-利用类d-flex与类d-inline-flex将容器定义为弹性盒子03-对弹性容器的的元素在水平方向上进行排列顺序设置03-对弹性容器的的元素在垂直方向上进行排列顺序设置04-弹性盒子内所有元素在主轴方向上的对齐方式05-1-弹性盒子内各行…

myArm 全新七轴桌面型机械臂

引言 在不断演进的科技世界中,我们始终追求创新和卓越,以满足客户的需求并超越他们的期望。今天,我们很高兴地宣布我们的最新产品——myArm 300 Pi,一款七轴的桌面型机械臂。这款产品的独特之处在于其灵活性和可编程性&#xff0c…

16. Seata 分布式事务

Spring Cloud 微服务系列文章,点击上方合集↑ 1. 简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。 事务是保障一系列操作要么都成功,要么都失败。就比如转账:A转账100元给B&#xff0…

sentinel-dashboard-1.8.0.jar开机自启动脚本

启动阿里巴巴的流控组件控制面板需要运行一个jar包,通常需要运行如下命令: java -server -Xms4G -Xmx4G -Dserver.port8080 -Dcsp.sentinel.dashboard.server127.0.0.1:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &…

如何评估测试用例的优先级?

评估测试用例的优先级,有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题,助于提高测试质量,提高用户满意度。 如果没有做好测试用例的优先级评估,往往容易造成对系统关键功能和高风险场景测试的忽略&…

STM32定时器

目录 基本定时器结构框图 通用定时器结构框图 高级定时器结构框图 ​编辑TIMx时基单元 定时工作原理 影子寄存器 ​编辑 定时器中断基本结构 定时器计时中断 定时器外部中断 输出比较 OC 输出比较模式 PWM基本结构 输出比较常用函数 使用PWM来驱动舵机 输入捕…

NAS文件的名称或路径过长导致文件同步被挂起

将文件复制到群晖设备时遇到文件名长度限制问题,NTFS文件系统(通过Samba等方式在群晖上使用): 在Windows系统上广泛使用的NTFS文件系统也支持较长的文件名,最大长度为255个字符。然而,要注意的是,使用Samba…

如何找回回收站删除的文件?文件恢复,3个方法!

“求助求助!回收站里面删除的文件还能恢复吗?在清理电脑内存的时候一不小心把回收站清空了,现在不知道如何是好,请大家帮帮我!” 电脑回收站里的文件清空了就是被永久删除了吗?如果误删了回收站里的文件还有…