GO语言中struct{}和struct{}{}区别

ops/2024/12/23 7:47:50/

定义一个Stu结构体:

type Stu struct {Name string
}

声明一个Stu类型的变量并赋值:

var stu Stu
stu.Name = "小红"

声明一个struct类型变量并赋值还有一种方式是使用匿名struct:

stu := struct {Name string
}{"小红"
}

还可以用匿名struct声明一个变量,但不赋值:

stu := struct {
}{
}

strcut{}:大小为0,不占任何内存
struct{}{}:是 struct 类型值,该值为空
比如使用 map 类型构造集合,可以使用这样一个类型的map —— map[string]struct{},使用 struct{} 类型的值来节省空间。

package main
import "fmt"func main() {zoo := make(map[string]struct{})zoo["monkey"] = struct{}{}zoo["tiger"] = struct{}{}_, ok := zoo["monkey"]fmt.Println("Is monkey in the zoo?", ok)_, ok := zoo["cat"]fmt.Println("Is cat in the zoo?", ok)
}// 运行结果
// Is monkey in the zoo? true
// Is cat in the zoo? false

比如说 LeetCode 1436. 旅行终点站就用到了 map 类型构造集合

func destCity(paths [][]string) string {// 构造起点集合set_start := make(map[string]struct{}, len(paths))// 构造终点集合(同时也是答案集合,最终元素个数为一)set_end := make(map[string]struct{}, len(paths))for _, path := range paths {start, end := path[0], path[1]// 将起点加入起点集合set_start[start] = struct{}{}// 已经是起点了,就不可能在答案集合里面delete(set_end, start)if _, ok := set_start[end]; !ok {set_end[end] = struct{}{}}}for ans := range set_end {return ans}return ""
}

补充:

package main
import "fmt"func main() {var s struct{} // 空结构体,作为占位符或标记,作为值可以节省内存空间,不存储任何信息fmt.Println(s) // 输出:{}
}
package main
import "fmt"func main() {s := struct{}{} // 空结构体实例fmt.Println(s) // 输出:{}
}

http://www.ppmy.cn/ops/123049.html

相关文章

如何使用GeoIP和ELK(Elasticsearch、Logstash和Kibana)映射用户位置

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 IP 地理定位是用于确定 IP 地址的物理位置的过程,可以用于各种目的,如内容个性化和流量分析。通过地理位置…

用Spring Boot搭建IT交流与学习平台

1 绪论 1.1 研究背景 在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中[3]。它将促进整…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

文章目录 272. 包基本介绍272.1 看一个应用场景272.2 包的三大作用272.3 包的基本语法 273. 包原理274. 包快速入门275. 包命名276. 常用的包277. 包的使用细节278. 访问修饰符规则278.1 基本介绍278.2 四种访问修饰符的访问范围 279. 访问修饰符细节280. 封装介绍281. 封装步骤…

nginx-2-配置

准备配置文件 解压后去除多余内容 worker_processes 1; events {worker_connections 1024; } http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;locatio…

Python 基于 flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

PCL 点云添加随机噪声并保存

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 添加随机噪声实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&…

【C++】:lambda表达式的高级应用

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 今天 我们来见见lambda表达式的高级用法 用法1&#xff1a;自定义删除器 有些类型的delete方法并不符合自身的析构方法&#xff0c;这时我们就需要自定义删除器。 unique_ptr<FILE> ptr1(fopen…

数据结构——排序(插入排序)

目录 一、插入排序 二、直接插入排序 基本概念&#xff1a; 工作原理&#xff1a; 示例&#xff1a; 代码实现 三、希尔排序 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;工作原理 &#xff08;三&#xff09;示例 &#xff08;四&#xff09;代码实…