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

定义一个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.mfbz.cn/a/888673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人自助超市系统小程序源码开发

随着科技的飞速发展和消费模式的转变,无人自助超市作为一种新兴的商业模式,以其便捷性、高效率以及对“体验式购物”的完美诠释,受到了广泛关注。本文renxb001将深入探讨无人自助超市系统小程序源码开发的核心环节和技术要点。 一、系统需求分…

Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...

无所畏惧地面对未知,并将其视为成长的机会 大纲官网快速入门1.安装node.js -- 这里推荐用nvm管理2.脚手架创建3.electron 包安装到应用的开发依赖4.创建主进程(main.js)并启动项目1.创建页面2.配置main.js3.启动项目 -- 效果 进阶 -- 基于项目场景功能使用场景一&am…

近年来自动驾驶行业就业与企业需求情况

自动驾驶行业在近年来持续发展,就业情况和企业需求呈现出多样化和复杂化的趋势。 以下是基于我搜索到的资料对自动驾驶行业最新就业情况和企业需求的详细分析: 自动驾驶行业对高端技术人才的需求非常旺盛,尤其是架构工程师、算法工程师等岗…

某乎登录加密以及zseck加密逆向

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 某乎的登录除了需要通过网易易盾外,登录还需要传额外的加密data参数,某盾的加密可以看我之前的文章,这里着重讲解登录以及后续ck的加密,将最终的的登录采集代码…

通过MySQL Workbench 将 SQL Server 迁移到GreatSQL

通过MySQL Workbench 将 SQL Server 迁移到GreatSQL 一、概述 MySQL Workbench 提供了可以将Microsoft SQL Server的表结构和数据迁移到 GreatSQL 的功能,此次将通过MySQL Workbench将SQL Server的数据迁移到GreatSQL。 本文章只是简单演示一下单张表的迁移&…

【LeetCode】每日一题 2024_10_8 旅行终点站(哈希)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 国庆结束了 . . . 力扣的每日一题也来到了终点站 题目:旅行终点站 代码与解题思路 func destCity(paths [][]string) string { // 国庆结束,旅途到了终点// 今天这道题算是一个小…

【LeetCode: 1870. 准时到达的列车最小时速 | 二分】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片,Watch DogTimer,可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

“炫我”受邀出席虚拟现实及元宇宙产业创新论坛!

当前,新一轮科技革命和产业变革向纵深演进,虚拟现实及元宇宙等相关产业加速发展,催生了新产业新业态新模式,发展潜力巨大、应用前景广阔。 9月27日,由北京市科学技术委员会、中关村科技园区管理委员会,北京…

JavaScript 访问者模式:打造高扩展性的对象结构

一. 前言 在面向对象编程中,访问者模式(Visitor Pattern)是一种行为设计模式,它允许我们向现有的类结构添加新的操作,而无需修改这些类。这对于需要对类层次结构中的元素进行复杂算法处理的场景非常有用。 本文将详细…

【AI绘画SD教程】Lineart线稿上色和IP-Adapter 人像写真插件实操教学,轻松助你生成多种风格的AI人像大片!SD零基础入门到精通教程

大家好,我是画画的小强 今天给大家分享一下如何用AI绘画工具StableDiffusion当中的 LineArt线稿处理 和 IP-Adapter 实操教学。 本期教程开始之前,请先确保你的电脑已经安装好StableDiffusion这款AI绘图工具,如你还没有安装使用&#xff0c…

最新价值5000元的V2M2引擎传奇源码2024BLUE升级版 团购

最新团购的V2M2引擎源码2024年BLUE升级版 特点优势是最新XE12编辑器,微端,各种自定义UI 无限仿GOM引擎功能 参考地址:最新价值5000元的V2M2引擎传奇源码2024BLUE升级版[原始团购版]_1234FCOM专注游戏工具及源码例子分享下载地址:BlueCodePXL…

适合技术小白入门 AI 编程的六个场景

前言 AI 编程最近特别热闹。 自媒体文章说它很强大,确实身边也会看到技术小白用它做出酷炫作品,令人艳羡。 但你自己用时却常遇到坑,找技术朋友一问听到的回答是“AI 干不了这个、铁定会把你带沟里去”。 谁说得对?技术小白到底能…

Linux——磁盘分区、挂载

Linux 分区 原理介绍 原理图如下 当我们在/home目录下新建一个文件a.txt时,该文件实际上是存放在硬盘B的分区1中的,这就是图里说的,当进入某个目录,可以进入到该目录下挂载的分区里的意思 硬盘说明 应用实例:挂载一个…

Linux的六个入侵检查思路及预防

背景 入侵检查是保障计算机安全运行的重要手段之一, 通过操作系统的静态配置分析、日志分析、异常行为分析以及文件完整性等方式来做检查,来判断我们的操作系统是否有受到入侵。今天阿祥就介绍十个简单的入侵检查思路及应对措施,希望对大家有…

基于JavaWeb开发的java springmvc+mybatis学生考试系统设计和实现

基于JavaWeb开发的java springmvcmybatis学生考试系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…

45岁被裁员的程序员,何去何从?

在当今快速变化的技术行业,职业生涯的稳定性受到挑战。在45岁被裁员,对很多程序员来说,可能是一种惊慌失措的体验。然而,这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析,并提…

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页,如果某个Tag的Tag header中的TagType值为18,表示该Tag为Script Tag(脚本Tag,又称Data Tag、SCRIPTDATA tag)。这时如果Filter的值不为1表示未加…

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位,通过硬件过采样扩展到16位,模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…

Docker学习和部署ry项目

文章目录 停止Docker重启设置开机自启执行docker ps命令,如果不报错,说明安装启动成功2.然后查看数据卷结果3.查看数据卷详情结果4.查看/var/lib/docker/volumes/html/_data目录可以看到与nginx的html目录内容一样,结果如下:5.进入…