随笔分类 -  Golang

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

上一页 1 2 3 4 5 6 ··· 8 下一页
点击右上角即可分享
微信分享提示