- 博客(1137)
- 收藏
- 关注
转载 一文搞懂Go gRPC服务Handler单元测试
在云原生时代和微服务架构背景下,HTTP和RPC协议成为服务间通信和与客户端交互的两种主要方式。对于Go语言而言,标准库提供了net/http/httptest包,为开发人员提供了便捷的方式来构建服务端HTTP Handler单元测试的测试脚手架代码,而无需真正建立HTTP服务器,让开发人员可以聚焦于对Handler业务逻辑的测试。比如下面这个示例://grpc-test-examples/ht...
2023-11-27 08:02:20
2
转载 Go 内存分配:结构体中的优化技巧
在使用Golang进行内存分配时,我们需要遵循一系列规则。在深入了解这些规则之前,我们需要先了解变量的对齐方式。Golang的unsafe包中有一个函数Alignof,签名如下:funcAlignof(xArbitraryType)uintptr对于任何类型为v的变量x,AlignOf函数会返回该变量的对齐方式。我们将对齐方式记为m。现在,Golang确保m是满足变量x的内存地址 % m =...
2023-11-22 11:00:44
22
转载 活动精彩回顾|GopherChina 2023 上海站
GopherChina 2023大会在上海圆满落幕啦~感谢所有嘉宾、组织者和志愿者们,同时也非常感谢热情的Gopher们~另外我们即将开启各城市的线下meetup,期待我们再次相聚!大会ppt获取:https://github.com/gopherchina/conference下面为大家展示部分大会照片。大会盛况GopherChina 2023上海站阅读原文即可获取大会ppt...
2023-11-20 12:06:59
37
转载 提升应用性能:Go中的同步与异步处理
在开发过程中,当需要同时处理多个操作时,开发者经常面临同步和异步两种处理方式的选择。同步处理在同步处理方式中,任务按顺序一个接一个地执行。每个任务必须在下一个任务开始之前完成。这意味着如果某个任务需要花费大量时间来完成,它可能会阻塞后续任务的执行,导致潜在的性能瓶颈。一个简单的现实生活中的例子是两个人在喝啤酒时进行对话。一个人说一些话并提问,另一个人根据情况回应,然后反过来...在下面的示例中,每...
2023-11-16 08:00:43
38
转载 写出高质量代码的秘诀:Golang中的测试驱动开发(TDD)
在软件开发的世界中,质量至关重要。编写代码不仅仅是为了能运行,更要保证代码的可维护性和无缝演变。测试驱动开发(TDD)是一种广受欢迎的方法论,它有着充分的理由。本文将探讨TDD是什么,为什么它是必要的,以及如何在Golang中应用TDD,Golang是一门以效率和简洁著称的编程语言。什么是测试驱动开发(TDD)?测试驱动开发,通常被称为TDD,是一种软件开发过程,强调在编写实际代码之前编写测试。T...
2023-11-14 08:00:22
30
转载 开源不止,创新澎湃 | 2023开源产业生态大会六大专题抢“鲜”看!马上报名,锁定席位!...
2023开源产业生态大会作为上海市经济和信息化委员会、上海市科学技术协会指导的年度重点活动,2023开源产业生态大会即将于12月19日在上海开幕。大会将展示最前沿的开源创新项目,从金融科技、人工智能到智能汽车、智能制造、工业软件等一系列颠覆性应用,无疑是年内一场不容错过的科技盛宴。大会与中国信通院云计算与大数据研究所、北京国家金融科技认证中心、OpenHarmony生态委员会、中国汽车工业协会软件...
2023-11-14 08:00:22
91
原创 Go 14岁了
今天我们庆祝Go开源十四周年!Go度过了美好的一年,发布了两个功能齐全的版本和其他重要的里程碑。我们在2月份发布了Go 1.20,在8月份发布了Go 1.21,更多地关注实现改进而不是新的语言更改。在Go 1.20中,我们预览了配置文件引导优化(PGO),并在Go 1.21中正式发布。PGO允许Go编译器读取程序的配置文件,然后花更多时间优化程序中最常运行的部分。在启用PGO后,Go 1.21中的...
2023-11-11 21:46:42
155
转载 《酷Go - GoBackup 自动化服务器备份工具》
之前,我曾经写过一片《Backup - 备份你的服务器环境》同时 Ruby China 以及一些其他的场景我也在持续用它备份我需要维护的服务器,但是,久了你回发现,部署 Backup 其实很麻烦,运行也会因为 Ruby 的版本迭代导致一些小问题。于是我想着用 Go 来写一个类似的东西,简化备份这件事情。GoBackup 是一个类似backup/backup的一站式备份工具,为中小型服务器/个人...
2023-11-09 08:02:11
40
转载 【福利加码】GopherChina上海站
GopherChina 上海站福利再加码!亲爱的 Gopher 们,我们很高兴地宣布,GopherChina 在上海站的福利再次增加!这次我们为大家带来了更多的惊喜和优惠,让你们在参加活动的同时,享受到更多的福利。首先,我们获得了全球创业周的大力支持。以非常低的价格为我们提供了活动场地及活动签到系统的支持,让我们能够顺利地举办活动。有了这些支持,我们将早鸟票价保持至11月13日(为对接创业周的签到...
2023-11-08 12:23:03
32
转载 Go语言中的闭包:封装数据与功能的强大工具
来源:爱发白日梦的后端闭包是包括 Go 在内的编程语言的一项强大功能。通过闭包,您可以在函数中封装数据,并通过函数的返回值访问这些数据。在本文中,我们将介绍 Go 中闭包的基础知识,包括它们是什么、如何工作以及如何有效地使用它们。什么是闭包?go官方有一句解释:★Function literals areclosures: they may refer to variables defined...
2023-11-07 08:00:50
37
转载 酷Go - Scratch 基于Clickhouse的开源版本BigQuery
ScratchDB是一个BigQuery开源的替代品,用于处理任意JSON并对其执行分析查询。您可以在https://www.scratchdb.com/找到更多关于ScratchDB的信息。ScratchDB是一个用于处理JSON数据的工具,它可以帮助您轻松地对数据进行分析和查询。它是一个开源的替代品,可以处理任意JSON,并对其执行分析查询。它是Clickhouse的包装器,当添加新数据时,它...
2023-11-05 11:00:07
94
转载 在 Go 中管理多个数据库连接
来源:爱发白日梦的后端简介作为软件工程师,经常会遇到应用程序需要与多个数据库协同工作的情况,而每个数据库都有其独特的要求和配置。在遵守最佳编码实践的同时,有效地处理这些不同的数据库连接对于构建健壮且易于维护的应用程序至关重要。挑战:多个数据库连接在软件开发过程中,使用MySQL、PostgreSQL或其他数据库是很常见的。由于配置和要求不同,管理这些连接可能具有挑战性。为了有效应对这一挑战,...
2023-11-01 08:04:15
68
转载 在 Go 中支持 WASI(Go 1.21新特性)
Go 1.21 通过添加新的 wasip1 值来支持针对 WASI 预览版 1 系统调用 API 的新端口。这个端口建立在 Go 1.11 中引入的现有 WebAssembly 端口之上。什么是 WebAssembly?WebAssembly(Wasm)是一种最初为 Web 设计的二进制指令格式。它代表了一种标准,允许开发人员以接近本机速度直接在 Web 浏览器中运行高性能、低级代码。Go 在 1...
2023-10-30 16:54:09
96
转载 神秘大咖亲临现场 | GopherChina 2023上海站
历时三年Gopher China大会再次回到魔都,过去的三年历经坎坷改变了很多,但GoCN社区的初心未改。GoCN社区的使命是为Go语言开发者提供学习和交流平台,帮助开发者解决技术问题,提升技能水平,实现个人和企业的价值。每一届的大会我们都尽可能的邀请到国内外的顶级大咖来交流分享,为时下最新的应用实践提供展示的舞台,为Gopher们提供全方位的学习和交流平台。本次大会我们也将邀请国内外的知名大咖与...
2023-10-26 12:00:41
98
转载 Go1.21中的PGO技术详解
2023 年初,Go 1.20发布了PGO(Profile-guided optimization)预览版供用户测试。在解决了预览版中的已知限制,并通过社区反馈和贡献进行了额外的改进后,Go 1.21 中的 PGO 支持已准备好用于生产!更多更详细的内容可以参考PGO用户指南(https://go.dev/doc/pgo)。下面我们将通过一个例子来展示 PGO 如何提高应用程序性能。在此之前,我们...
2023-10-25 09:01:26
56
转载 流量回放工具
作用在评估某个服务可用性时,一种常见方式是采用一些压测工具(如ab/hey/jmeter/siege/wrk/locust等)压测某几个核心接口,一般看达到某个TPS/QPS时,CPU/内存等资源的水位;或者固定资源的阈值,看最高能达到的TPS/QPS。但这样有一个问题: 对于线上服务,真实用户的请求是复杂的,如请求的接口顺序,带的参数。这很可能会影响服务真实的可用性。(如某个接口A请求方法B,在...
2023-10-25 08:00:00
41
转载 时隔3年,重磅回归 | Gopher China魔都盛会
????我在这儿Gopher China,曾在北京璀璨绽放,让每一位参与者感受首都的独特魅力。也曾在上海繁华举办,让大家领略魔都的无限风情。11月,GopherChina将再次回归上海,为您带来一场属于gopher世界的盛宴。这是备受期待的GopherChina大会的延续!11月19日我们将再次聚集在一起,共同庆祝充满活力的Go编程语言社区。活动详情GopherChina是一个千载难逢的机会,让Go爱好...
2023-10-23 08:01:08
77
转载 Go中的流量限制:有效控制流量
来源:爱发白日梦的后端介绍速率限制是构建可扩展和弹性系统的关键技术。它通过对指定时间范围内允许的请求数量施加限制来帮助控制流量。在Go中实现速率限制可以确保最佳的资源利用,并保护您的应用程序免受过度流量或滥用行为的影响。在这篇博文中,我们将探索Go中的速率限制技术,并提供实用的代码示例来帮助您有效地实现它们。理解速率限制速率限制包括定义一组规则,这些规则决定客户端在给定的时间窗口内可以发出多少请...
2023-10-18 08:00:47
55
转载 golang select 机制
来源:爱发白日梦的后端在 Go 语言中,select是一种用于处理多个通道操作的控制结构。它可以用于在多个通道之间进行非阻塞的选择操作。select语句由一系列的case子句组成,每个case子句表示一个通道操作。select语句会按照顺序依次检查每个case子句,并执行其中可执行的操作。select的作用主要有以下几个方面:多路复用通道select可以同时监听多个通道上的...
2023-10-16 08:02:17
49
转载 gin路由相关方法
c.Request.URL.Path 拿到请求的路径packagemainimport("fmt""github.com/gin-gonic/gin""net/http")//路由重定向,请求转发,ANY,NoRoute,路由组funcmain(){r:=gin.Default()//---------------路由重定向(到其他网址)-----...
2023-10-11 08:00:33
64
转载 速率限制:控制服务资源利用和质量的关键工具
一、前言速率限制是一个重要的控制服务资源利用和质量的途径。在Go语言中,通过协程(goroutine)、通道(channel)和打点器(ticker)的支持,可以优雅地实现速率限制。本文将介绍速率限制的基本概念,并通过多个代码演示来展示其在实际应用中的工作原理和用途。二、内容2.1 基本速率限制首先,让我们看一下基本的速率限制。假设我们希望限制服务接收请求的处理速度,我们可以将这些请求发送到一个通...
2023-10-09 08:00:09
63
转载 为go vet添加一个新的分析器,用于检查append后面的值缺失
缘起:2023年5月25号,知名Go技术专家,WA语言[1]联合发起人,多本技术书籍的合著者柴大[2],遇到一个append忘记写要添加的元素,只写了第一个参数(要追加的切片)的问题,可以编译通过,但大概率不是开发者本意。目前go vet缺失这样的检测项,柴大知道我对Go源码一直充满热枕,建议尝试实现。即对于以下情况,希望在执行go vet检测时,可以抛出提示funcAppendsTest()...
2023-10-07 08:01:12
52
转载 几种Go版本管理工具
缘起:编译下面这段代码时,在Mac上没有什么问题,正常运行,点击查看代码:packagemainimport("bytes""encoding/binary""encoding/json""fmt""log""math/rand""net/http""time")funcmain(){http.HandleFunc("/register",...
2023-09-28 08:03:30
85
转载 go vet中的那些检测项
go vet 是 Go 语言自带的一个工具,用于分析 Go 代码中的常见错误和潜在bug。它可以检查代码中可能存在的各种问题,例如:未使用的变量、函数或包可疑的函数调用错误的函数签名程序中的竞态条件错误的类型转换等本文意图列出当前go tools项目中提供的所有检测项及其作用目前tools中的分析器,集成到go vet的只有30个,很多可能因为噪音(误报)太多,而没有加进去Run 'go help...
2023-09-26 08:02:23
81
转载 Go 语言如何获取 CPU 利用率
概述 Go 语言标准库没有提供获取 CPU 利用率的方法,如果业务开发中需要用到一些服务器性能指标数据,必须由开发者自己实现。本文主要介绍在 Linux 中如何获取 CPU 利用率,笔者的示例代码运行环境为 go1.20 linux/amd64。 命令行工具 Linux 中常见的命令如 top、htop、sar, 可以非常方便地获取和显示 CPU 利用率等数据,下面是 top 命令的结果输出。t...
2023-09-21 08:00:00
190
转载 使用Singleflight优化Go代码
介绍有许多方法可以优化代码以提高效率,减少运行进程就是其中之一。在本文中,我们将看到如何通过使用一个Go包Singleflight来减少重复进程,从而优化Go代码。问题假设你有一个web应用,它每秒有10个请求(RPS)。根据您所知道的数据,其中一些请求具有相同的模式,实际上可以生成相同的结果,这意味着实际上存在冗余流程。从上面的插图中,我们知道用户1和用户2想要相同的东西,但最终,我们(大多数情...
2023-09-19 08:03:25
55
转载 用 Go 编写简洁代码的最佳实践
介绍简洁的代码对于创建可维护、可阅读和高效的软件至关重要。Go 是一种强调简单和代码整洁的语言。在本文中,我们将结合代码示例,探讨编写简洁 Go 代码的最佳实践。有意义的变量和函数名称使用能表达变量和函数用途的描述性名称。避免使用隐晦或过于简短的名称。// Bad:func fn(x int) int { // ...}// Good:func calculateFactoria...
2023-09-14 08:00:59
71
转载 Go几种读取配置文件的方式
比较有名的方案有使用viper管理配置[1]支持多种配置文件格式,包括 JSON,TOML,YAML,HECL,envfile,甚至还包括Java properties支持为配置项设置默认值可以通过命令行参数覆盖指定的配置项支持参数别名viper[2]按照这个优先级(从高到低)获取配置项的取值:explicit call to Set: 在代码逻辑中通过viper.Set()直接设置配置项的值fl...
2023-09-12 08:02:49
347
转载 Golang实用进阶工具
gotests[1]Generate Go tests from your source code.goget-ugithub.com/cweill/gotests/...gotests -hUsageofgotests:-allgeneratetestsforallfunctionsandmethods-exclstring...
2023-09-05 08:00:36
85
转载 慎写指针类型的全局变量
简述:在 关于range二三事[1] 第二个case中,介绍了对于指针类型的 切片/map变量A 的循环,要格外注意, 迭代出的value作用域是整个方法而非循环体内.改进办法:在循环体中引入中间变量,"暂存"下每次迭代的value的值但对于这个A,如果是全局变量,则又极有可能出现问题:packagemainimport("fmt")typeUserInfostruct{...
2023-09-01 08:01:21
52
转载 借助gopsutil库,获取机器相关信息
使用github.com/shirou/gopsutil/disk这个库,如何获取机器下不同磁盘分区的内容使用 github.com/shirou/gopsutil/disk 库获取机器下不同磁盘分区的内容,可按如下:import"github.com/shirou/gopsutil/disk"//调用disk.Partitions()函数获取机器下所有磁盘分区的信息:partitio...
2023-08-29 08:01:06
79
转载 Go异常处理机制panic和recover
来源:旅途散记recover使用panic抛出异常后, 将立即停止当前函数的执行并运行所有被defer的函数,然后将panic抛向上一层,直至程序crash。但是也可以使用被defer的recover函数来捕获异常阻止程序的崩溃,recover只有被defer后才是有意义的。funcmain(){print(123)print(456)panic("throwanerror...
2023-08-25 13:10:26
76
转载 zap 高性能设计与实现
概述 zap 是 Uber 开源的 Go 高性能日志库,性能远超于标准库和其他开源日志库。zap 使用简单,支持多种格式结构化日志、可以设置不同的日志级别,并且能够在堆栈跟踪中记录调用者信息。为什么要使用 zap功能/库标准库 logzap日志级别只有 Print 在生产可用,因为 Fatal 级别会终止进程,Panic 级别会抛出 panic支持多种日志级别日志结构化 仅支持简单本...
2023-08-22 08:04:05
156
转载 Go中的匿名函数与闭包
关键词: 函数式编程 闭包 匿名函数 匿名函数特别适合作为函数或方法的回调 在Go中函数是一等公民,和string,int等一样。而在C、C++ 等不支持匿名函数的语言中,函数不能在运行期创建go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包题图来自https://www.meetgor.com/golang-closures/闭包 与 普通函数的区别在(普通)函数里面定义一个内部函...
2023-08-17 08:00:55
75
转载 Go 语言中的零拷贝
传统读写模式 传统读写模式流程图第一次数据拷贝: 用户进程发起 read() 系统调用,当前上下文从用户态切换至内核态,DMA(Direct Memory Access) 引擎从文件中读取数据,并存储到内核态缓冲区 (DMA 拷贝)第二次数据拷贝: 将数据从内核态缓冲区拷贝到用户态缓冲区 (CPU 拷贝),然后返回给用户进程,拷贝数据时会发生一次上下文切换 (从内核态切换到用户态)第三次数据拷贝...
2023-08-15 08:00:46
109
转载 Asynq: 基于Redis实现的Go生态分布式任务队列和异步处理库
Asynq[1]是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的sidekiq[2]和Python的celery[3]。Go生态类似的还有machinery[4]和goworker同时提供一个WebUI asynqmon[5],可以源码形式安装或使用Docker image, 还可以和Prometheus集成docker run --rm --name asynqmon...
2023-08-11 08:03:37
177
转载 Go 性能分析工具从入门到精通
概述 Go 语言自带的 pprof 是一种性能分析工具,用于帮助开发者分析和优化程序的性能,它可以提供关于 CPU 耗时、内存分配、网络 IO、系统调用、阻塞等待等方面的详细信息。 快速开始 我们来通过一个小例子直观的感受下 pprof 的使用方法,本文所有示例代码运行环境是 go1.20 darwin/arm64。示例程序packagemainimport("bytes""lo...
2023-08-07 08:01:09
294
转载 Go项目实现日志按时间及文件大小切割并压缩
关于日志的一些问题:单个文件过大会影响写入效率,所以会做拆分,但是到多大拆分? 最多保留几个日志文件?最多保留多少天,要不要做压缩处理?一般都使用 lumberjack[1]这个库完成上述这些操作lumberjack//info文件writeSyncerinfoFileWriteSyncer:=zapcore.AddSync(&lumberjack.Logger{Filena...
2023-08-04 08:00:40
482
转载 微服务中的熔断算法
雪崩效应 在微服务系统中,整个系统是以一系列功能独立的微服务组成,如果某一个服务,因为流量异常或者内部其他原因,导致响应异常,那么该服务会影响到其下游服务,从而发生一系列连锁反应,最终导致整个系统崩溃,这就是微服务中的 雪崩效应。例如:当前系统中有 A,B,C 三个服务,服务 A 是上游,服务 B 是中游,服务 C 是下游。一旦下游服务 C 变得不可用,积压了大量请求,服务 B 的请求也随之阻...
2023-08-02 08:01:29
77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人