随笔分类 - Golang
摘要:基本分析 在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow 为前缀的方法来处理的。 其中扩缩容涉及到的是插入元素的操作,对应 mapassign 方法: func mapassign(t *maptype, h *hmap, key unsafe.Point
阅读全文
摘要:一、传统 IF 判断 1、在业务中使用大量的 if 判断 代码如下: package main type SellInfo struct { Price float64 OrderCount int TotalCount int MemberShip int } func main2() { var
阅读全文
摘要:在现代 CPU 架构中,分支预测是为了提高指令执行的效率。然而,如果 if/else 语句的分支走向难以预测,就可能会降低程序效率。这是因为当 CPU 执行到 if/else 语句时,它需要猜测接下来要执行的是 if 分支还是 else 分支。如果 CPU 的预测错误,就需要清空已经预取和执行的部分
阅读全文
摘要:Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go 语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖 json 解析的应用里,往往会成为性能瓶颈,从下面的火焰图中可以发现在业务逻辑处理中,有一半多的性能
阅读全文
摘要:在Go语言中,空指针是一个常见的运行时错误来源,它通常发生在尝试访问一个未被初始化或已被设置为nil的指针所指向的值。 1、凡是有点『.』操作的的行为都要先进行非nil判断: 例如,想记录一个err的msg,通过err.Error()就可以获取到err的string类型的错误消息msg,但这里需要对
阅读全文
摘要:当多个协程同时访问和修改同一个共享资源(如切片)时,如果没有适当的同步机制,可能会导致数据竞争和不一致的结果。 func processChunk(chunk []int64, wg *sync.WaitGroup, failedList []int64) { defer wg.Done() fmt
阅读全文
摘要:1、项目介绍 go-wrk是一个强大的HTTP基准测试工具,利用Go语言的并发特性(goroutines和调度器)来生成大规模负载,可以在单个多核CPU上运行并达到显著的性能。这个项目最初的目的是对比Go和C语言在构建类似工具时的性能和代码复杂度,结果显示Go语言的性能同样出色,且代码量更少。 2、
阅读全文
摘要:nsq最初是由bitly公司开源出来的一款简单易用的消息中间件,它可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息。它有以下特性: 分布式。它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。 易于扩展。它支持水平扩展,没有中心化的
阅读全文
摘要:背景介绍 目前开发的产品架构采用微服务架构,微服务之间通信的消息格式则使用的proto3标准协议格式。 proto介绍 全称Protocol Buffers是Google公司开发的一种数据描述语言,是一种类似 XML但更灵活和高效的结构化数据存储格式,可用于结构化数据的序列化,适用于数据存储、RPC
阅读全文
摘要:channel是引用类型,需要实用make来创建channel,如下 make(chan Type, [buffer]) chan Type 通道的类型buffer 是可选参数,代表通道缓冲区的大小(省略则代表无缓冲) 使用make创建channel,第一个参数是channel类型。size表示缓冲
阅读全文
摘要:1)var 变量声明多用于全局变量 var name type // var 变量名 数据类型 定义一个 type 类型的变量 name, 并分配内存空间给 name 赋 type 类型的零值。 var name *type 定义一个 type 类型的指针变量 name, 指针变量不分配内存空间,零
阅读全文
摘要:接口 接口(interface)定义了一个对象的行为规范,之定义规范不实现,由具体的对象来实现规范的细节。 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就
阅读全文
摘要:gRPC和HTTP都是网络协议,但是它们之间存在一些显著的区别。 1、传输协议HTTP使用文本基础的协议,而gRPC使用的是二进制协议,这意味着gRPC数据包更小,传输效率更高。另外,gRPC使用HTTP/2协议,支持多路复用,从而可以更好地处理并发请求。2、性能差异gRPC在性能方面优于HTTP。
阅读全文
摘要:用法1)主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数(可选参数) package main import "fmt" func test(args ...string) { // 可以接受任意个string参数 for _, v := range args { fmt.Print
阅读全文
摘要:在当今构建软件时,开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是 Go 和 Rust ,都很强大但却截然不同。Rust和Go似乎都是系统编程语言,都编译为机器码,并且都提供了出色的性能。 将权衡它们在并发、安全性、速度、互操作性等方面的方法。将探讨每种语言的优势 - Go 适用于云原生开发,
阅读全文
摘要:go-cache是一种内存中的key:value store/cache库,类似于Memcached,适用于在一台机器上运行的应用程序(单机应用程序)。 文档 https://pkg.go.dev/github.com/patrickmn/go-cache https://github.com/pa
阅读全文