1.4go微服务实战(go语言基础)---函数方法接口和反射

enlyhua enlyhua     2022-10-23     677

关键词:

第4章 函数、方法、接口和反射 
4.1 函数 
	4.1.1 函数的定义 
	4.1.2 闭包 
		Go语言中的闭包就是引用了自由变量的函数,被引用的自由变量同函数一直存在,即时离开了自由变量的环境也不会被释放和删除。闭包中可以
	继续使用这个变量。

		函数+引用环境=闭包

		统一函数与不同引用环境的组合,可以形成不同的实例。

		闭包会把函数和所访问的变量组合在一起,不再关心这个变量原来的作用域,闭包本身可以看做是独立对象。闭包函数与普通函数最大的区别
	在于参数不是值传递,而是引用传递,所以闭包可以操作自己函数以外的变量。

	4.1.3 作用域 
	4.1.4 多返回值及变长参数 
		Go语言中,函数的参数只能进行值传递,不能引用传递。虽然可以使用指针,但是本质上传递的还是指针指向的地址,因为访问的是地址内的值,
	所以会被误认为是引用传递。比如,切片会让人觉得函数在处理切片时使用的是引用传递,其实是因为切片里包含地址,所以可以直接访问。此外,
	切片包含的长度和容量也是通过值传递传到函数内的,如果在函数内修改了长度和容量,函数外的切片是接收不到的,所以需要返回一个切片,也是
	基于这个原因,append函数才会每次返回切片。

	4.1.5 defer关键字 

4.2 方法 
4.3 接口 
	接口的值是如何存储的?接口的类型包括两个部分,即一个具体类型和该类型的一个值,分别称为动态类型和动态值。为什么称为动态类型和动态值呢?
这是因为Go语言作为一种静态语言,经过编译后就没有严格意义上的类型值了,所以需要通过类型描述来描述类型的具体信息,以提供给编译器使用。
	
	接口类型的值(简称接口值)包括动态类型和动态值,也就是说在编译阶段并不知道具体的类型和值,而是在程序执行到此时再通过动态类型和动态值去
调用具体的方法。

4.4 反射 

1.6go微服务实战(go语言基础)---包和代码测试

第6章 包和代码测试6.1 包及Go工具 6.1.1 包导入 6.1.2 Go工具6.2 代码优化 6.2.1 Go代码的优化 代码的优化要基于Go语言的语法和编译器原理进行。代码的优化关键是性能分析。 Go语言提供了runtime/pprof标准库。gotoolpprof--help 6.... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情

3.15go微服务实战(微服务理论)---领域驱动设计的go语言实现

第15章 领域驱动设计的Go语言实现15.1 聚合模式介绍 实体(entity):可以持久化存储的对象 值对象(valueobject):值集合的对象,比如"钱"这个值对象包括"币种"和"金额"两个值的集合 工厂(factory):负责初始化对象的对象或方法 ... 查看详情

11.go语言高并发与微服务实战---统一认证与授权

统一认证与授权:        查看详情

1.2go微服务实战(go语言基础)---基本数据类型

第2章 基本数据类型2.1 整型 2.1.1 整型取值范围 2.1.2 运算符 2.2 浮点型 尽量使用float64,因为float32是按照小数位数输出的,但默认小数位数并不准确。2.3 复数和布尔类型2.4 格式化说明符 查看详情

12.go语言高并发与微服务实战---分布式链路追踪

分布式链路追踪:      查看详情

12.go语言高并发与微服务实战---分布式链路追踪

分布式链路追踪:      查看详情

2.9go微服务实战(go语言基础)---goweb编程

第9章 GoWeb编程9.1 net/http包 9.1.1 GoWeb工作的基本原理 9.1.2 http详解9.2 Web框架 9.2.1 选择框架 9.2.2 httprouter框架9.3 Web底层服务 9.3.1 Scoket简介 9.3.2 TCPSocket 9.3.3 UDPSocket 9.3.4 WebSocket9.4 中间件 9.4.1 基本用法 9.4.2 进阶... 查看详情

1.5go微服务实战(go语言基础)---并发编程

第5章 并发编程 Go语言的多线程是基于消息传递的,Go语言将基于CSP模型的并发编程内置到了语言中,其特点就是goroutine之间是共享内存的。5.1 协程 协程是Go语言特有的一种轻量级线程,实际上,所有的Go语言... 查看详情

4.go语言高并发与微服务实战---go语言高级特性

第4章进阶——Go语言高级特性 Go语音是一门静态强类型的语言,在程序编译的过程中会把变量的反射信息如字段类型、类型信息等写到可执行文件中。在程序执行过程中,Go语音虚拟机加载可执行文件中变量的反射信息,并提供... 查看详情

4.go语言高并发与微服务实战---go语言高级特性

第4章进阶——Go语言高级特性 Go语音是一门静态强类型的语言,在程序编译的过程中会把变量的反射信息如字段类型、类型信息等写到可执行文件中。在程序执行过程中,Go语音虚拟机加载可执行文件中变量的反射信息,并提供... 查看详情

2.1go微服务实战(go语言进阶)---并发编程进阶

第8章 并发编程进阶8.1 竞态与并发模式 8.1.1 数据竞态 8.1.2 并发原理8.2 sync包 8.2.1 sync.Mutex互斥锁 8.2.2 sync.RWMutex多读写锁 8.2.3 sync.Once 8.2.4 sync.Cond 8.2.5 sync.Pool 8.2.6 sync.Map8.3 context包 8.3.1 应用场景 8.3.2 定义 8.3.3... 查看详情

3.20go微服务实战(微服务实战)---日志和监控

第20章 日志和监控20.1 日志实践20.2 指标 20.2.1 指标数据类型 20.2.2 命名约定 20.2.3 存储和查询 20.2.4 Grafana20.3 日志记录 20.3.1 具有关联ID的分布式跟踪 20.3.2 ElasticSearch、Logstash和Kibana 20.3.3 Kibana 20.4 异常    查看详情

3.20go微服务实战(微服务实战)---日志和监控

第20章 日志和监控20.1 日志实践20.2 指标 20.2.1 指标数据类型 20.2.2 命名约定 20.2.3 存储和查询 20.2.4 Grafana20.3 日志记录 20.3.1 具有关联ID的分布式跟踪 20.3.2 ElasticSearch、Logstash和Kibana 20.3.3 Kibana 20.4 异常    查看详情

go微服务实战之如何实现加解密操作的微服务开发

1前言在上一篇文章——《​​Go微服务实战之如何使用go-micro写微服务应用​​》中,我们介绍了微服务的相关概念和go-micro框架的特点。接下来,我们将以循序渐进的方式建立一个简易的提供加解密服务的Go微服务项目。首先为... 查看详情

3.16go微服务实战(微服务理论)---go语言基于es-cqrs的微服务实践

第18章 Go语言基于ES-CQRS的微服务实践18.1 理论介绍 18.1.1 事件溯源 指的是将每次的事件都记录下来,而不是去记录对象的状态。只能追加,不能对已经添加的事件做修改。 18.1.2 命令查询职责分离 1.命令 不返回任何结果... 查看详情

3.16go微服务实战(微服务理论)---go语言基于es-cqrs的微服务实践

第18章 Go语言基于ES-CQRS的微服务实践18.1 理论介绍 18.1.1 事件溯源 指的是将每次的事件都记录下来,而不是去记录对象的状态。只能追加,不能对已经添加的事件做修改。 18.1.2 命令查询职责分离 1.命令 不返回任何结果... 查看详情