
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{}{}的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Golang中struct{}和struct{}{}的区别解析
目录 struct {} struct {} {} 使用场景举例 首先说下Golang中的结构体,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,Golang中使用关键字struct来创建一个结构体,语法如下: typeStudentstruct { Name string } 下面定义一个Student结构体,例如: typeStudentstruct { name string } 然后声明一个Student类型的变量并赋值 var stu Student stu.name =
-
golang中的struct操作
struct是实现面向对象的重要技术,基本上都跟类型声明type name underlying-type结合使用. struct是值类型,所以它的零值是所有成员的零值.由于值类型在作为函数参数时的局限性,所以经常配合指针一起使用. 声明 type Employee struct { ID int Name string Address string } 一行一个成员,中间没有逗号或分号,大写的成员可以在包外访问. 如果类型相同,也可以考虑定义在一行,例如 type Employee struc
-
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, &
-
浅谈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和
-
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中struct和[]byte的相互转换示例
在网络传输过程中,经常会这样处理:socket接收到数据,先获取其消息头,然后再做各种不同的业务处理.在解析消息头的时候的方法有多种多样.其中最为高效解析消息头的方法就是直接把数据头部分强制类型转换为对应的消息头结构体.这种做法在C/C++中非常的常见.而golang其实也是可以这样子做的.类似这样的应用,直接类型转换获取消息对应的解析方法其实效率会相对较高. golang中struct和[]byte的转换方法,其实就是用到了golang中的unsafe包加上类型转换 , 约束:struct中不
-
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中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
-
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
-
C++中关键字Struct和Class的区别
Struct和Class的区别 今天这篇博文主要讲解在C++中关键字struct和class的区别.这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解. 从语法上来讲,class和struct做类型定义时只有两点区别: 1.默认继承权限,如果不指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理: 2.成员的默认访问权限.class的成员默认是private权限,struct默认是public权限.以上两点也是struct和class最基本的
-
C#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建一个class类型实例被分配在托管堆上.但struct和class的区别远不止这么简单. 概括来讲,struct和class的不同体现在: ● 类是引用类型,struct是值类型 ● 在托管堆上创建类的实例,在栈上创建struct实例 ● 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是
-
浅析Swift中struct与class的区别(汇编角度底层分析)
概述 相对Objective-C, Swift使用结构体Struct的比例大大增加了,其中Int, Bool,以及String,Array等底层全部使用Struct来定义!在Swift中结构体不仅可以定义成员变量(属性),还可以定义成员方法,和类比较相似,都是具有定义和使用属性,方法以及初始化器等面向对象特性,但是结构体是不具有继承性,不具备运行时强制类型转换的以及引用计数等能力的! 下面来从汇编角度分析struct与class的区别! 基本知识 1.结构体 自动初始化器 在63行的调用中可以传
随机推荐
- Mysql 忘记root密码的完美解决方法
- 两个打印机服务spoolsv.exe存在冲突的解决方法
- 正则表达式基础教程 regular expression第1/2页
- Ubuntu 16.04备份和恢复小结
- Linux NFS服务器的安装与配置方法(图文详解)
- 批处理写的电视机效果代码
- Android开发中Socket通信的基本实现方法讲解
- java 中模式匹配算法-KMP算法实例详解
- 深入探究Django中的Session与Cookie
- ABP框架中导航菜单的使用及JavaScript API获取菜单的方法
- CodeIgniter配置之database.php用法实例分析
- php natsort内核函数浅析第1/2页
- Python实现基于权重的随机数2种方法
- Android开发实现的电话窃听和拦截应用
- 全面了解js中的script标签
- 详解使用Dockerfile创建带Apache服务的CentOS Docker镜像
- 加强版phplib的DB类
- javascript判断回文数详解及实现代码
- 走马灯效果代码js appendChild实现的无缝滚动
- Ajax 框架之SSM整合框架实现ajax校验
其他
- python检测是否联网
- golang 不确定的套接字缓冲区大小
- Python主机在线检测
- springboot中activiti7自动部署
- centos8 nginx安装
- Navicat Premium如何导入SQL文件的方法步骤
- python dataframe去重 序号
- windows2016远程桌面授权
- springboot容器连接不上nacos容器
- canvas 三角函数画图
- java 获取JSON对象
- C#创建客户端并在poanman中传入参数代码
- window上java进程有很多socket
- linux nohup文件过大
- JQuery点击行 (tr)实现checkBox选中
- python 查找文件字符所在行
- requests 添加cookies
- pandas 如何取出特定index的行
- python 删除某一列为空的行
- vscode打开markdown文件怎么不显示里面的图片