Golang中struct{}和struct{}{}的区别解析

目录
  • struct {}
  • struct {} {}
  • 使用场景举例

首先说下Golang中的结构体,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,Golang中使用关键字struct来创建一个结构体,语法如下:

typeStudentstruct {
  Name string
}

下面定义一个Student结构体,例如:

typeStudentstruct {
 		name  string
}

然后声明一个Student类型的变量并赋值

var stu Student
stu.name = "小明"

声明一个struct类型变量并赋值还有一种方式是使用匿名struct,代码非常简洁:

stu := struct {
    name string
}{
    "小明",
}

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

stu := struct {

}{

}

把空行和空格去掉后就是struct {} {},所以到此就可以看出struct {}和struct {} {}的区别了。

struct {}

struct {}和struct { name string }一样是结构体类型, 只是没有任何元素。struct {}的特点是大小为0,不占用任何内存。

struct {} {}

struct {} {}一个struct {}类型的值,该值也是空。

使用场景举例

比如使用map类型构造集合,可以使用这样一个类型的map:map[string]struct{},使用struct{}类型的值来节省空间。

package main

import"fmt"funcmain() {
	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)
}

运行程序,输出如下内容:

Ismonkeyinthezoo?trueIscatinthezoo?false

到此这篇关于Golang中struct{}和struct{}{}的区别解析的文章就介绍到这了,更多相关go struct{}和struct{}{}的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang中的struct操作

    struct是实现面向对象的重要技术,基本上都跟类型声明type name underlying-type结合使用. struct是值类型,所以它的零值是所有成员的零值.由于值类型在作为函数参数时的局限性,所以经常配合指针一起使用. 声明 type Employee struct { ID int Name string Address string } 一行一个成员,中间没有逗号或分号,大写的成员可以在包外访问. 如果类型相同,也可以考虑定义在一行,例如 type Employee struc

  • Golang中struct{}和struct{}{}的区别解析

    目录 struct {} struct {} {} 使用场景举例 首先说下Golang中的结构体,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,Golang中使用关键字struct来创建一个结构体,语法如下: typeStudentstruct { Name string } 下面定义一个Student结构体,例如: typeStudentstruct { name string } 然后声明一个Student类型的变量并赋值 var stu Student stu.name =

  • 浅谈Go语言中的结构体struct & 接口Interface & 反射

    结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struct类型理解为类,可以定义方法,和函数定义有些许区别: struct类型是值类型. struct定义 type User struct { Name string Age int32 mess string } var user User var user1 *User = &User{} var user2 *User = new(User) struct使用 下面示例中user1和

  • Go空结构体struct{}的作用是什么

    目录 前言 作用 使用场景 实现集合类型 实现空通道 实现方法接收者 总结 前言 通过这篇文章<浅谈Go结构体的基本使用>,我们初步认识了空结构体,使用unsafe.SizeOf()方法,明确知道了空结构体,它不占用存储空间(即“宽度”为0,宽度描述了一个类型的实例所占用的存储空间的字节数) s := struct{}{} fmt.Println(unsafe.Sizeof(s)) //0 在项目代码中,我们经常都会看到空结构体struct{}{}的使用,所以肯定背后有一定的原因.那究竟它有什

  • Golang空结构体struct{}用途,你知道吗

    golang 空结构体 struct{} 可以用来节省内存 a := struct{}{} println(unsafe.Sizeof(a)) // Output: 0 理由如下: 如果使用的是map,而且map又很长,通常会节省不少资源 空struct{}也在向别人表明,这里并不需要一个值 本例说明在map里节省资源的用途: set := make(map[string]struct{}) for _, value := range []string{"apple", "o

  • golang语言如何将interface转为int, string,slice,struct等类型

    在golang中,interface{}允许接纳任意值,int,string,struct,slice等,因此我可以很简单的将值传递到interface{},例如: package main import ( "fmt" ) type User struct{ Name string } func main() { any := User{ Name: "fidding", } test(any) any2 := "fidding" test(a

  • golang中struct和[]byte的相互转换示例

    在网络传输过程中,经常会这样处理:socket接收到数据,先获取其消息头,然后再做各种不同的业务处理.在解析消息头的时候的方法有多种多样.其中最为高效解析消息头的方法就是直接把数据头部分强制类型转换为对应的消息头结构体.这种做法在C/C++中非常的常见.而golang其实也是可以这样子做的.类似这样的应用,直接类型转换获取消息对应的解析方法其实效率会相对较高. golang中struct和[]byte的转换方法,其实就是用到了golang中的unsafe包加上类型转换 , 约束:struct中不

  • Go 使用Unmarshal将json赋给struct出错的原因及解决

    例如: 将json: { "name": "Laura" "age": "18" } 赋给struct: type PersonalInfo struct { Name string `json:"name"` Age string `json:"age"` } 用语句: person := PersonalInfo{} err := json.Unmarshal(json, &

  • Golang中panic与recover的区别

    目录 前言 流程 关于recover 前言 与defer类似的是,goroutine 中也有一个_panic链表头指针指向一个_panic链,发生panic的时候也是在链表头插入_panic结构体(执行gopanic) 在执行过程中发生了panic.那么panic以后的代码不会执行,转而执行panic的逻辑,再执行defer,执行到的defer要将started标记为true,同时将其defer结构体中的_panic指针指向当前的_panic,表示这个defer是由该panic触发的.再去执行d

  • golang中json和struct的使用说明

    1.返回json响应结果 在struct的字段后面加入json:"key"可以进行json格式输出,其中key为json的键名 type SuccessResponse struct { Code int `json:"code"` Msg string `json:"msg"` Data interface{} `json:"data"` } func SuccessRsp(ctx *gin.Context, data in

  • golang中make和new的区别示例详解

    前言 本文主要给大家介绍了关于golang中make和new区别的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同. new(T) 返回的是 T 的指针 new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值. p1 := new(int) fmt.Printf("p1 --> %#v \n &quo

  • python中import和from-import的区别解析

    目录 . import导入模块的路径两种方式 . import 模块名 和 from 模块名 import * 是不同的; .重新导入模块的方法 import和from-import的显著区别 . import导入模块的路径两种方式 # 将模块所在路径再程序中添加到sys.path列表中 import sys sys.path import导入模块按照sys.path顺序依次查找,""代表当前路径 # 修改操作系统的PYTHON_PATH环境变量 # 系统的环境变量 export PY

  • python中reversed与reverse的区别解析

    目录 reverse() reversed() reverse() reverse()是python列表独有的内置方法,在字典,元组,字符串中是不能够使用这个方法的,它用于将列表中的元素反转,颠倒. lista = [1, 2, 3, 4] lista.reverse() print(lista) #[4, 3, 2, 1] reversed() reversed()是python内置的一个函数,但它返回的是一个反转的迭代器.而reversed()是python自带的一个方法,准确说,应该是一个

  • JAVA中StringBuffer与String的区别解析

    看到这个讲解的不错,所以转一下 在java中有3个类来负责字符的操作. 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作,不可变类. 3.StringBuffer 也是对一串字符进行操作,是可变类. String:    是对象不是原始类型.    为不可变对象,一旦被创建,就不能修改它的值.    对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承. StringBuffer:   

  • JavaScript中Null与Undefined的区别解析

    在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undefined类型只有一个值,即undefined.当声明的变量还未被初始化时,变量的默认值为undefined. Null类型也只有一个值,即null.null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象. 复制代码 代码如下: var oValue;  alert(oValue ==

  • golang中struct和interface的基础使用教程

    前言 本文主要给大家介绍了关于golang中struct和interface的相关内容,是属于golang的基本知识,下面话不多说了,来一起看看详细的介绍吧. struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套:go中的struct类型理解为类,可以定义方法,和函数定义有些许区别:struct类型是值类型. struct定义 type User struct { Name string Age int32 mess string } var user User

随机推荐