golang工程组件之网关grpc-gateway

通过gRPCGateway,我们可以轻松地将标准的HTTP/1.1RESTfulAPI转换为gRPCAPI,从而方便我们使用gRPC协议进行服务之间的通信。而gRPCGateway则是一个Golang工程组件,它可以将RESTfulAPI转换为gRPCAPI,从而方便我们使用gRPC协议进行服务之间的通信。gRPCGateway是一个Golang开源项目,它可以将标准的HTTP/1.1RESTfulAPI转换为gRPCAPI,以便于使用gRPC协议进行服务之间的通信。_go网关
阅读全文

GO语言中的Map使用详解

Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。Go语言中并没有提供一个set类型,但是map中的key也是不相同的,可以用map实现类似set的功能。_gomap
阅读全文

golang内存分配

这个函数先计算出传入参数的大小,然后调用mallocgc函数,这个函数三个参数,第一个参数是对象类型大小,第二个参数是对象类型,第三个参数是malloc的标志位,这个标志位有两位,一个标志位代表GC不需要扫描这个对象,另一个标志位说明这个对象并不是空内存。这两个链表的机制是这样的,我new一个对象的时候,从nonempty中获取这个空间,放到empty链表中去,当我free一个对象的时候,从empty链表中还原到nonempty链表中去。其中的m,p,g的信息需要对下面这个图有印象。
阅读全文

深入Golang调度器之GMP模型

随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别。并发:逻辑上具有处理多个同时性任务的能力。并行:物理上同一时刻执行多个并发任务。通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。在单核处理器上,通过多线程共享CPU时间片串行执行(并发非并行)。而并行则依赖于多核处理器等物理资源,让多个任务可以实现并行执行(并发且并行)。
阅读全文

golang中panic和recover的使用规则

在golang当中不存在tye...catch异常处理逻辑。在golang当中使用defer,panic和recover来控制程序执行流程,借此来达到处理异常的目的。Panic是一个可以停止程序执行流程的内置函数。假设当前F函数当中某处代码触发panic函数,则F函数停止后面代码的执行,转而执行F函数内部的defer函数(如果已经声明了defer函数的话...),然后结束F函数,将当前处理权转给F的调用函数。对于F的调用方M来说,。这一点很重要,因为调用panic函数结束是没有返回值的。
阅读全文

Golang中的汇编详解

我们知道Go语言的三位领导者中有两位来自Plan9项目,这直接导致了Go语言的汇编采用了比较有个性的Plan9风格。不过,我们不能因咽废食而放弃无所不能的汇编。不同体系结构的CPU,其内部寄存器的数量、种类以及名称可能大不相同,这里我们只介绍AMD64的寄存器。AMD64有20多个可以直接在汇编代码中使用的寄存器,其中有几个寄存器在操作系统代码中才会见到,而应用层代码一般只会用到如下三类寄存器。
阅读全文

浅析Golang中的channel

Channel是Golang在语言级别提供的goroutine之间的通信方式,可以使用channel在两个或多个goroutine之间传递消息。Channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。使用通道发送和接收所需的共享资源,可以在goroutine之间消除竞争条件。
阅读全文

golang中defer的使用规则

在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。
阅读全文
本文目录
    Loading...