如何检查空结构?

2024-02-07

我定义了一个结构体...

type Session struct {
    playerId string
    beehive string
    timestamp time.Time
}

有时我给它分配一个空会话(因为 nil 是不可能的)

session = Session{};

然后我想检查它是否为空:

if session == Session{} {
     // do stuff...
}

显然这是行不通的。我该怎么写呢?


您可以使用 == 与零值复合文字进行比较,因为中的所有字段Session are 可比 https://golang.org/ref/spec#Comparison_operators:

if (Session{}) == session  {
    fmt.Println("is zero value")
}

游乐场示例 http://play.golang.org/p/wRUmxj1naS

因为一个解析歧义 https://golang.org/ref/spec#Composite_literals, if 条件中的复合文字两边需要括号。

指某东西的用途==以上适用于所有字段都为的结构可比 https://golang.org/ref/spec#Comparison_operators。如果结构体包含不可比较的字段(切片、映射或函数),则必须将这些字段与其零值进行一一比较。

比较整个值的另一种方法是比较必须在有效会话中设置为非零值的字段。例如,如果有效会话中玩家 ID 必须为 != "",则使用

if session.playerId == "" {
    fmt.Println("is zero value")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查空结构? 的相关文章

  • 在 Swift 中使用 NSCoding 归档可选结构数组?

    我已经在 Obj C 中完成了大量 NSCoding 归档 但我不确定它如何处理 Swift 中的结构 也不确定它如何处理具有可选值的数组 这是我的代码 public struct SquareCoords var x Int y Int
  • 结构填充和包装

    考虑 struct mystruct A char a int b char c x struct mystruct B int b char a y 结构的大小分别为 12 和 8 这些结构是填充的还是包装的 何时进行填充或包装 Padd
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 如何构建一个不链接到 musl libc 的 go 可执行文件

    So 官方的 Go 构建容器基于 Alpine 高山用途musl https www musl libc org 作为 libc 而不是 glibc 我需要在容器中构建一个可以在使用 glibc 的 Ubuntu 上运行的 Go 可执行文件
  • 如何根据键名称反序列化为枚举变体?

    我有两种形式的 JSON Example field 42 A 76 Example field 42 B 110 我想将它反序列化成这样的结构 struct Example field i32 an enum AnEnum where e
  • 解压以 ASCIIZ 字符串结尾的结构

    我正在尝试使用struct unpack 分解以 ASCII 字符串结尾的数据记录 该记录 恰好是 TomTom ov2 记录 具有以下格式 存储为小端 1 byte 4 字节 int 表示总记录大小 包括该字段 4字节整数 4字节整数 可
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C
  • 如何在结构或类向量中快速搜索具有特定值的对象?由 小码哥发布于

    如果向量中有数千个结构或类对象 如何快速找到所需的对象 例如 制作游戏 我需要最快的碰撞检测方法 每个图块都是一个结构体 矢量图中有很多图块 其值是 x和y 所以基本上我这样做 For i 0 i
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • 多个生产者,单个消费者:所有 goroutine 都在睡觉 - 死锁

    在继续工作之前 我一直遵循检查通道中是否有任何内容的模式 func consume msg lt chan message for if m ok lt msg ok fmt Println More messages m else bre
  • 如何使用 exec.Command 在 golang 中执行 Mysql 脚本

    您好 我正在尝试执行一个脚本以使用 Golang 将数据填充到数据库中 func executeTestScript cmd exec Command usr local mysql bin mysql h127 0 0 1 P3333 u
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 如何覆盖 go 模块中的依赖项?

    In dep您可以选择覆盖依赖项并使其指向不同的存储库 例如以下内容https github com kubermatic glog logrus https github com kubermatic glog logrus库一需要将以下
  • go build 不断抱怨:go.mod 有 post-v0 模块路径

    Go 1 11 发布后 我一直在尝试将我的存储库移动到 Go 模块 方法是添加go mod文件在其根目录下 我的根库之一my host root其版本为17 0 1 所以我在其中写道go mod file module my host ro
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • 模块路径格式错误...第一个路径元素中缺少点

    我有一个包含 2 个不同可执行文件的项目 每个可执行文件都有自己的依赖项以及对根的共享依赖项 如下所示 Root gt server gt main go gt someOtherFiles go gt go mod gt go sum g
  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 在 Go 中,如何将函数的 stdout 捕获到字符串中?

    例如 在 Python 中 我可以执行以下操作 realout sys stdout sys stdout StringIO StringIO some function prints to stdout get captured in t

随机推荐

  • 如何在 Laravel 中插入数据库之前验证图像尺寸

    我是 laravel 的新手 im 尝试验证图像的尺寸 我想要尺寸最小 宽度 100 高度 50 iam 在controller php 中使用验证代码在这里 galimg gt 必需 最大 200kb DimensionMin 300 3
  • html 未在 wamp 中解析为 php

    我在 htaccess 文件中使用此代码片段将 html 解析为 php
  • 如何在Eclipse中支持UTF-8编码

    如何在 eclipse 中添加 UTF 8 支持 我想添加例如俄语 但 eclipse 不支持它 我应该怎么办 请指导我 Try this 1 Window gt Preferences gt General gt Content Type
  • LINQ 是对象关系映射器吗?

    LINQ 是一种对象关系映射器吗 LINQ 本身是一组语言扩展 可帮助查询 提高可读性并减少代码 LINQ to SQL 是一种 OR 映射器 但它并不是特别强大 这实体框架 http msdn microsoft com en us li
  • 警告“导入的库具有相同的名称,但它们不具有相同的名称”

    我在类中有以下导入语句 import package dart web toolkit ui dart import util flex table builder dart as ftBldr import factors list vi
  • 在 C++ 中创建 setter 函数的最佳方法

    我想编写一个通过移动或复制接收参数的模板函数 我使用的最有效的方法是 void setA A a m a std move a 在这里 当我们使用的是 A a setA a lt lt one copy ctor one move ctor
  • 包含 boost/Optional.hpp 时出现 C2143 语法错误

    我遇到了一个我无法理解的编译时错误 我尝试使用boost optional在我的代码中 一旦我包含boost optional hpp我无法再构建我的项目了 如果我注释掉这个 include 语句 它就会起作用 我什至没有任何实际用途boo
  • 如何在 bash 中不使用 printf 将字符转换为 ASCII

    ascii printf d 1 我目前正在使用此函数将字符转换为 ASCII 但是我只想将函数的结果存储为变量而不打印 ascii 我该怎么办呢 请记住 我总共只使用了几个小时的 bash 如果这是一个愚蠢的问题 我很抱歉 在 bash
  • 如何解决此 RCurl 错误:“SSL 证书问题:证书已过期”?

    我只是想获得下面一个简单的 URL 响应 但出现以下错误 该网站是有效的 我过去已经可以从该网站提取数千次信息 jsonString lt getURL full url Error in function type msg asError
  • 如何限制对ravendb管理面板的访问?

    当默认情况下运行 Raven Server exe 时 管理面板在 IP PORT 地址处可见 如何限制仅特定用户访问此面板 Steve 我们将 RavenDB 作为 Windows 服务运行 并使用 Windows 身份验证来控制访问 如
  • 将画布保存到图像文件会保存空白黑色图像

    首先 我对 UWP 和 XAML 还很陌生 我在我的 uwp 上编写了一个简单的代码 其中有一个画布 命名为 ImageHolder 里面有一个图像和文本块 我的主要问题是 每当我尝试使用 RenderTargetBitmap 将画布保存到
  • 如何在git的post-receive钩子中处理分支上的文件

    我有一个远程服务器 我在上面创建了一个裸 git 存储库 我想创建一个钩子 以便给定的脚本在任何给定分支上收到的最新代码上运行 我知道post receive可以使用钩子来实现它 但是我想做以下事情 找到收到代码的分支 在临时位置检出代码并
  • Python:交织两个列表[重复]

    这个问题在这里已经有答案了 执行以下操作的 pythonic 方法是什么 我有两个清单a and b相同长度的n 我想形成一个列表 c a 0 b 0 a 1 b 1 a n 1 b n 1 c item for pair in zip a
  • jQuery / JavaScript 中的自定义滚动条数学

    我目前正在开发一个项目 该项目使用自定义滚动插件 由我编写 来允许元素在触摸设备以及桌面浏览器中滚动 一切都工作正常 包括 iOS 的速度和减速度 然而 剩下的唯一问题是当用户滚动时计算滚动条的顶部 或左侧 位置 我用以下公式计算了滚动条的
  • 在我的 Express.js Jest 测试中找不到内存泄漏

    我现在花了一些时间尝试在 Jest 测试中查找内存泄漏 尽管我已经成功解决了一些问题 但仍然有相当多的内存在测试套件之间泄漏 具体来说 当我npm test 所有测试套件 我得到以下输出 PASS src suite1 test ts 71
  • iPhone 消息应用程序中的上滑菜单是如何实现的?

    在我的 iPhone iOS 8 0 2 上的消息应用程序中 当您撰写消息并单击相机图标插入图像时 底部会出现一个 向上滑动 菜单 它包含一些按钮 以及我可以插入到消息中的最近拍摄的照片 这个菜单叫什么名字 已经可以通过本地课程获得了吗 图
  • 无法搜索联系人

    所以我制作了一个静态联系人列表 并尝试添加搜索栏 但是我无法使用搜索栏搜索联系人 当我单击搜索栏时 它会打开但随后关闭 键盘会弹出一会儿 然后就会关闭 这个想法是使搜索具有预测性 因此当输入名称时 它将根据数据库中的名称列出已关闭的名称 有
  • 删除 JSON 元素

    我想从 JSON 中删除 JSON 元素或一整行 我有以下 JSON 字符串 result FirstName Test1 LastName User FirstName user LastName user FirstName Ropbe
  • Haskell:映射函数应用

    我在 Haskell 中进行的部分计算会产生映射的函数列表Float to Float 我想对所有这些函数应用一个参数 如下所示 x Float functions Float gt Float map f gt f x functions
  • 如何检查空结构?

    我定义了一个结构体 type Session struct playerId string beehive string timestamp time Time 有时我给它分配一个空会话 因为 nil 是不可能的 session Sessi