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

embedded/2024/10/9 15:23:14/

定义一个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/embedded/125128.html

相关文章

JAVA无人值守共享娱乐棋牌室系统源码

无人值守共享娱乐棋牌室系统——自由畅玩,尽享娱乐新风尚 🎲 开篇:无人值守,开启娱乐新纪元 在这个快节奏的时代,人们越来越追求便捷、高效的娱乐方式。而“无人值守共享娱乐棋牌室系统”正是这样一款应运而生的创新…

状态设计模式

简介 状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型设计模式。 通用模板 创建环境类角…

LSTM的变体

一、GRU 1、什么是GRU 门控循环单元(GRU)是一种循环神经网络(RNN)的变体,它通过引入门控机制来控制信息的流动,从而有效地解决了传统RNN中的梯度消失问题。GRU由Cho等人在2014年提出,它简化了…

移动技术开发:文件的读取

1 实验名称 文件的读写 2 实验目的 掌握Android中读写文件的实现方法。 3 实验源代码 布局文件代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android&quo…

Navicat下载安装

官网地址&#xff1a;Navicat | Download Navicat Premium 14-day trial versions for Windows, macOS and Linux 1、进入官网下载地址&#xff0c;根据需求进行下载 2、双击安装程序&#xff0c;点击【下一步】 3、选择【我同意】&#xff0c;点击下一步 4、自定义安装路径&a…

PostgreSQL学习笔记一:简介及运用场景

一、PostgreSQL简介 PostgreSQL&#xff0c;通常简称为Postgres&#xff0c;是一个高度可扩展的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它以其强大的功能、稳定性和对SQL标准的遵守而闻名。以下是PostgreSQL的一些关键特性和优势&#xff1a;…

第一篇-基础-第八章-日志的操作

日志是必需的。日志的操作必须是可统一控制、分级管理同时能保留到本地的。 8.1 SpringBoot默认的日志框架 SpringBoot支持多种日志框架,通常情况下,这些日志由一个日志抽象层和一个日志实现层搭建完成,日志抽象层是为了记录日志提供的一套标准且规范的框架,其作用是为记录日…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…