当前位置: 首页 > article >正文

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.kler.cn/news/339952.html

相关文章:

  • 10-记录器
  • 高精度分板机主轴4033AC气动自动换刀的优势特点
  • LSTM-Transformer时间序列预测(单输入单预测)——基于Pytorch框架
  • java家政预约上门系统源码,家政服务平台源码,基于SpringBoot框架,数据库使用MySQL,界面渲染采用Thymeleaf技术开发
  • 文件防泄密措施措施有哪些?5种文件防泄密措施等你体验!【小白成长篇!】
  • uniapp使用Vue3组合式,如何进行Vue模块自动导入
  • 初识Linux · 自主Shell编写
  • SpringBoot框架:服装生产管理的智能助手
  • Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...
  • 美团餐馆预订管理信息系统--课程设计李冬梅
  • 【计算机网络 - 基础问题】每日 3 题(三十)
  • 算法【更多二维动态规划题目】
  • vite学习教程03、vite+vue2打包配置
  • 如何在银河麒麟服务器中获取关键日志信息
  • wordpress在页面中调用另外一个页面的内容
  • 怎么将手机备忘录传送至电脑
  • 阿巴阿巴阿巴阿巴阿巴阿巴
  • 【SQL学习笔记】
  • 通过MySQL Workbench 将 SQL Server 迁移到GreatSQL
  • Cloud-Edge-Terminal Collaborative AIGC for Autonomous Driving