API签名验证

背景 公司内部服务之间调用是,使用的签名如下: // 签名验证 func ValidateSignatureMiddleware(svc *service.Service) gin.HandlerFunc { return func(ctx *gin.Context) { ctxx := contextx.NewContextx(ctx, svc) if svc ...

Go 从os.Stdin读取数据的方式

在go语言中,从标准输入(os.Stdin)读取数据的常见方式有下面几种: 1. 使用fmt.Scan系列函数 fmt.Scan系列函数提供了简单的从标准输入读取数据的方法。 1.1 fmt.Scan 从标准输入读取由空白符(空格、制表符、换行符等)分隔的值,并将这些值保存到提供的参数中。 换行符被视为空白符,因此会忽略掉换行符继续输入。 返 ...

Go语言接口实现断言技巧详解

在Go语言中,接口是一个非常重要的概念,用于定义一组行为的集合,任何实现了该接口方法集的类型都可以视为该接口的实现。在接口的使用过程中,有一种较为高级的技巧,即通过类型断言来确保某个类型实现了接口。这篇博客将详细介绍其中一种常用方式: var _ Buffer = (*StringBuffer)(nil) 这行代码看起来简单,却非常实用。在大型项目中,它可以帮助我们避免 ...

三元运算符

Go语言中并没有内置的三元运算符(类似a ? b : c),但可以通过定义一个泛型函数 Ter 来实现相同的效果。以下是详细的实现与使用示例。 实现三元运算符函数 在Go 1.18+版本中引入了泛型,允许定义泛型函数。Ter 函数的实现如下: // 三元运算符函数 func TerT any T { if cond { r ...

go中的等值比较

在编程过程中,我们经常需要比较两个值是否相等。go提供了丰富的数据类型,那么这些类型都是怎么进行等值比较的呢?下面我们来学习一下。 go中的数据类型 基本类型 整型 (int8, int16, int32, int64, int, uint8, uint16, uint32, uint64, uint, byte, rune) 浮点型 (fl ...

golang获取指定git分支的模块

问题 今天早上接到通知,openai公布了最新的gpt-3.5-turbo和gpt-4的模型版本,gpt-3.5-turbo-0613和gpt4-0613。打算把模型换成最新的模型,打开openai接口的go sdk,发现已经有[issue](https://github.com/sashabara ...

Slice踩坑日记

问题 今天遇到一个这样的问题。背景是这样的,项目需要维护一个多账号的openai Client,我选取了mapstring*openai.Client这种结构来实现。map用来区分不同标识,slice用来维护同一个标识下面的多个openai Client。代码如下: // openai config type OpenAIConfig struct { Secre ...

http断开后,如何继续执行服务端代码

问题 业务需求 服务端需要调用一个event stream格式响应的接口,实时响应数据给客户端。 响应数据是被分为多个数据块,以流失数据的形式给到。 服务端能够实现对event stream接口的完整调用 遇到问题 由于公司主流的技术架构还是lamp那一套,apache服务器通过调用php module来执行php的脚本。当http请求断开后,php脚本 ...

goroutine和channel

问题 有一个品类的csv文件,大概有3w多条数据,里面只有品类名称这一列,现在需要读取csv中的内容,调用接口实现对该品类的打分,讲返回的数据写入新的csv文件,新的csv文件包括两个字段,品类和对应的分数。由于打分接口逻辑比较复杂,单次执行比较耗时,如果让你用go来实现,应该怎么做呢? 思考 对于上面的问题,可以将主要的功能分为三个函数,csv文件读取、调用接口打分、csv文件 ...

go项目开发热更新-fresh

什么是热更新 代码热更新是在研发过程中,修改代码后能够实时生效。方便测试修改代码是否达到了预期的结果。 像php这样的动态语言是在运行过程中实时编译的,所以不存在热更新的问题。而像golang这样的 静态语言,由于先要编译成二进制文件才能运行。在研发过程中修改完代码后,再手动生成二进制文 件运行,这样会导致研发效率低下的问题。因此“热更新”这个词就孕育而生。所谓 ...