首页 > 其他分享 >Go语言--复合类型之map、结构体

Go语言--复合类型之map、结构体

时间:2024-07-07 14:56:34浏览次数:22  
标签:map 初始化 -- 成员 类型 key Go 结构

map

Go 语言中的 map(映射、字典)是一种内置的数据结构,它是一个无序的 key-value 对的集合,比如以身份证号作为唯一键来标识一个人的信息。
在这里插入图片描述

格式

map [keyType]valueType
在一个 map 里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会造成编译错误:。
map 值可以是任意类型,没有限制。map 里所有键的数据类型必须是相同的,值也必须相同,但键和值的数据类型可以不相同。

  • 注意:map是无序的,我们无法决定它的返回顺序,所以,每次打印结果的顺利有可能不同。
    在这里插入图片描述
    map只有len,没有cap
  • 可以指定容量,系统会分配响应的内存给map,这样不需要在插入元素的时候在一个一个进行扩容,同时,超过指定的容量,map也会自动扩容。
  • 键值一定是唯一的
    在这里插入图片描述

map的创建

  1. 传统创建
  2. 通过make创建,并且可以指定长度
  3. 初始化
    在这里插入图片描述

map的遍历

  • 通过循环来进行遍历
  • 如何判断一个key值是否存在:value, ok := m3[0] 第一个返回值为key所对应的value,第二个返回值为key是否存在的条件,存在ok为true
    在这里插入图片描述

map删除某一个key值

  • 通过delete(map,key)可以删除map中指定key的元素。
    在这里插入图片描述

map做函数参数—引用传递

在这里插入图片描述

结构体

有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
在这里插入图片描述
结构体是一种聚合的数据类型,它是由一系列只有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。
语法

type Student struct {
	id   int
	name string
	sex  byte
	age  int
	addr string
}

结构体的初始化

  • 顺序初始化,每个成员必须初始化
  • 指定成员初始化,没有初始化为默认为0
    在这里插入图片描述

结构体指针遍历初始化

*以及&符即可
在这里插入图片描述

操作结构体成员

通过.运算符来操作成员。

在这里插入图片描述

操作指针变量

  • 只能使用.运算符
  • 可以先定义一个普通结构体变量,在使指针变量保存结构体变量的地址,这样指针有了合法的指向以后在进行操作结构体成员;
  • 也可以通过new来申请一个结构体,操作结构体成员
    在这里插入图片描述

结构体的比较

如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用==!=运算符进行比较,但不支持><。同类型的2个结构体变量可以相互赋值。
在这里插入图片描述

结构体做函数参数

值传递,形参无法改变

在这里插入图片描述

地址传递–形参可以改变实参

在这里插入图片描述

可见性

Go 语言对关键字的增加非常吝啬,其中没有private、protected、 public 这样的关键字。
要使某个符号对其他包(package)可见(即可以访问),需要将该符号定义为以大写字母开头。如果是小写,只能在同一个包里面使用。
结构体也是一样的
在这里插入图片描述
不同的包,想要操作别的包结构体的变量,也必须保证结构体成员的首字母是大写的。
在这里插入图片描述

标签:map,初始化,--,成员,类型,key,Go,结构
From: https://blog.csdn.net/m0_73537205/article/details/140085353

相关文章

  • Go语言--复合类型之切片
    slice概念数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。Go语言提供了数组切片(slice)来弥补数组的不足。切片并不是数组或数组指针,它通过内部指针和相关属性引用数组片段,以实现变长方案。sli......
  • JSP静态Webshell编码
    #0x00 背景介绍JSP静态Webshell分析,包括unicode、html、cdata、特殊字体编码等,相互结合以达到欺骗效果。#0x01unicode编码JSP中可以解析unicode编码,通过contentType字段定义。原始一句话如下:Stringcmd=request.getParameter("cmd");Processprocess=Runtime.getRu......
  • Go语言--复合类型之指针与数组
    分类指针指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C++语言中由于对指针的滥用而造成......
  • GraalVM简介及使用
    在本文中,我们将回顾GraalVM是什么、它是如何工作的,以及即时(JIT)编译和提前(AOT)编译之间的区别?GraalVM是一种高性能运行时,为用Java和其他语言编写的应用程序提供了显着的优势。它由Oracle开发,通过利用高级优化和独特的架构,可以更快、更高效地运行应用程序。1.......
  • 前端随手记第三天
    1.HTML<fieldset>name属性定义和用法:name属性规定fieldset的名称。name属性用于在JavaScript中引用元素,或者在表单提交之后引用表单数据。语法:<fieldsetname="text"> <!DOCTYPEhtml><html><head> <meta charset="utf-8"> <title>菜鸟教......
  • 20240705
    T1NFLSOJP5030最小表示考虑两个串本质相同的条件,发现如果计算出每一位上的字母距离它上一次出现的距离\(dis_i\),那两个串本质相同等价于所有\(dis_i\)相同。注意到这个东西只和相对位置有关,所以只需要先对原串求一遍\(dis\)数组,然后对这个\(dis\)数组后缀排序一下,求出......
  • 选择结构
    选择结构if单选择:if(布尔表达式){//true执行的语句}if双选择:if(布尔表达式){//true执行的语句}else{//false执行的语句}if多选择:if(布尔表达式1){//true执行的语句}elseif(布尔表达式2){//true执行的语句}elseif(布尔表达式3){//true执行......
  • 24-暑假软件工程周报(1)
    7-1-7-7第一周工作时间:7月1日14:00-17:00工作内容:担任组长完成课题规划,本人分到PTA课题7-57-67-77-13。完成课题7-5,配置恢复vscode中C++编程环境,进行课题7-5测试。测试结果:通过 工作时间:7月2日14:00-17:0019:00-20:30工作内容:进行课题7-6,复习数据结构课程散列......
  • let 声明的变量,只在代码块内有效
    {leta=10;varb=1;}a//ReferenceError:aisnotdefinedb//1for循环的计数器,就很适合使用let命令。for(leti=0;i<10;i++){//...}console.log(i);//ReferenceError:iisnotdefined上面代码中,计数器i只在for循环体内......
  • seo外链发布:如何选择合适的外链发布平台?
    在进行seo优化的过程中,外链发布是一个非常重要的环节。选择合适的外链发布平台可以帮助我们提升网站的权威性和排名。那么,如何选择合适的外链发布平台呢?下面为您解答。1.网站的权威性选择外链发布平台时,首先要考虑的是该网站的权威性。一个权威性高的网站,其外链对于提升网站的......