- 博客(10)
- 资源 (7)
- 收藏
- 关注
原创 为什么说golang参数传递为值传递?
一、函数参数传递方式函数参数传递有2种方式:值传递和引用传递。值传递是指调用函数时将参数值复制一份到函数,如果对函数参数进行修改,影响不到实际参数。引用传递是指调用函数时将参数的指针传递到函数中,函数中对参数的修改,将影响到实际参数。不同编程语言的函数参数传递方式不尽相同,例如C语言中的int、float等参数类型采用值传递的方式,而数组类型默认为引用传递,C++中的引用传递显而易见,其类型系统直接包含了引用类型。二、Go语言中的函数传递方式那么Go语言何种参数传递方式呢?开门见山,直接上官方说
2021-05-01 09:53:35 846 1
翻译 Go的反射原理(3)
3、反射的第三条规则:被修改的反射对象,其值必须可写第三条规则是最不易理解,具有迷惑性的,但是我们从第一条规则开始分析就慢慢就懂了。下面是代码不能正常工作,但是值得分析。var x float64 = 3.4v := reflect.ValueOf(x)v.SetFloat(7.2) // Error: 将抛出Panic如果你运行这段代码,panic错误信息如下panic: reflect.Value.SetFloat using unaddressable value出现报错不是7.
2020-11-22 22:08:06 675
翻译 Go的反射原理(2)
上一篇文章介绍了Go的interface类型,现在可以开始介绍反射了。1、反射的第一条规则:interface类型转reflection对象首先,我们需要了解reflect包中的两种类型:Type和Value.这两种类型,以及两个简单方法(reflect.TypeOf和reflect.ValueOf)使得我们可以访问interface类型。(另外,从reflect.Value也可以很容易获取reflect.Type,但是这里我们暂且将Value和Type这两个概念区分开)先讲TypeOf:packa
2020-11-15 10:43:40 113
翻译 Go语言的反射原理(1)
本文根据The Go Blog翻译,原文英文版:https://blog.golang.org/laws-of-reflection介绍反射是一种程序获取自身结构(特殊是数据类型)的机制。本文将阐述Go语言中的反射机制是如何工作的。每一种语言的反射机制是不同的,有些语言支持反射,有些语言则根本不支持。下文中所说的“反射”即是指Go语言的反射。类型和接口interfact反射是建立在类型系统的基础上,在正式介绍反射之前,本文将首先介绍Go语言的类型系统,特殊是interface类型,因为interf
2020-11-08 19:36:29 161
原创 Linux系统的虚拟内存管理
“虚拟内存”和“物理内存”的概念和区别,在上一篇文章已经已详细阐述,本文不再赘述。补充一点,“物理内存”资源有限,从稀缺资源分配的角度出发,系统更多考虑的是如何充分利用“物理内存”资源。相比之下,“虚拟内存”并不是什么稀缺资源,虽然每个进程可以拥有的虚拟内存空间也是有限的,但是一般情况,进程根本用不了那么大的虚拟地址空间。32位系统中每一个进程都有4G的虚拟地址空间,其中1G系统空间由所有进程共用,3G用户空间由每一个进程独占。因此,Linux系统的“虚拟内存”分配策略比较简单,更多从需求角度出发,尽可能满
2020-11-01 22:32:01 416
原创 Linux系统的物理内存管理
1、“物理内存”和“虚拟内存”一般我们说内存,即指“物理内存”。那为什么本文要强调“物理内存”的概念呢?这是为了和“虚拟内存”的概念区分。常见的操作系统,例如Linux和windows,都是建立在存储映射机制的基础上。不同计算平台的“物理内存”大小不尽相同,其在操作系统初始化时,根据硬件情况确定,而“虚拟内存”的大小是由操作系统本身决定,例如32位系统的每一个用户态进程拥有的“虚拟内存”大小就是固定4G。简单地说,同一个操作系统不管运行在什么机器上,每个进程拥有的虚拟内存空间都是固定的;而同一台机器不管
2020-10-15 20:05:33 487
原创 智能指针在数据缓存中的应用
一、一种数据本地缓存方法出于减少访问数据库次数,降低IO操作频率的目的,一些后台接口通常会对数据进行本地缓存,特别是不常更新的数据,比如静态配置数据。这些数据在几分钟,甚至几个小时之内在都不会发生任何变化。如果每次查询这类数据,都直接访问去数据库,或者进行其它IO操作,会对数据库等造成不必要的压力,降低接口的性能。一种常见的数据本地缓存方法是采用单例模式存储缓存对象。另外一方面,虽然本地缓存不经常更新,但是仍然需要一种机制可以定时刷新本地缓存,否则刷新缓存只能通过重启服务,非常不方便。工程实现中一般通
2020-09-28 08:15:37 316
原创 计算机网络问题定位过程
一、TCP协议TCP通信包括三个阶段——建立连接(3次握手)、数据传输、关闭连接(4次挥手)需要注意是图中实线表示客户端,虚线表示服务端,图的起点是Closed状态。“三次握手”流程如下:1、服务器端被动打开Closed -> Listen,客户端请求与服务端建立连接Closed -> SYN_SEND;2、服务端接收到连接SYN请求,回复SYN+ACK,状态由Listen -> SYN_RECV;3、客户端收到SYN+ACK,并最后回复ACK,状态由 SYN_SEND -&
2020-09-25 21:57:48 178
原创 为什么计算中负数表示为补码?
计算机中数的表示一、整数的表示二、CPU运算单元ALU三、负数的表示四、理论证明一、整数的表示计算机中所有类型的数都采用二进制编码,整数也不例外。正整数的表示,比较好理解,例如正整数“23”用8位数二进制编码表示为“00010111”,8位正整数可以表示的范围0~255。负数的表示就不是那么显而易见。以8位数为例,一般的想法是,将最高位用作符号位,其余编码与正整数类似。以“-23”为例,其二进制编码表示为“10010111”,可以看出“23”和“-23”除了符号位不同之外,其它位均一样。但实际上在计
2020-09-25 21:41:48 316
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人