教你如何零成本从0到1,开发上线一个对接了openAI的机器人
演示项目地址 如果该项目对你有帮助,请点个star支持下吧! 线上体验地址:https://www.wang-xiaowu.site/chat-gpt/ 仓库地址:https://github.com/behappy-project/behappy-chatgpt-assistant 技术沟通群二维码:https://raw.githubusercontent.com/wang-xiaowu/picture_repository/master/behappy_group.jpg 移动端 pdf格式无法展示动图:可点击该地址进行查看 PC端 pdf格式无法展示动图:可点击该地址进行查看 教程实现效果 pdf格式无法展示动图:可点击该地址进行查看 前置准备openai注册 关于注册账户可以查看我的这篇文章 不建议花钱买账户,一个是不确保它稳定。二来你花点时间熟悉这个东西也是帮助你长进的过程 API_KEY 地址:https://platform.openai.com/account/api-keys 登录点击个人头像,进入View API keys 首次进入...
加速Docker多阶段构建
多阶段构建虽然能够减小镜像体积,但是构建的速度慢了许多。原因在于:一是相比于原先的单阶段构建,多了一些构建步骤;二是缓存失效,多阶段编译之后只保留最终镜像的缓存,中间镜像的缓存丢失。其中缓存失效的问题在CI环境中尤为显著。 加快多阶段构建的措施有两项:并行构建和保留缓存并行构建 从Docker 18.09开始引入了并行构建,启用方法有两种: 临时启用:设置环境变量DOCKER_BUILDKIT=1; 原构建命令: docker build -f Dockerfile -t test_name . 增加DOCKER_BUILDKIT=1后的命令: DOCKER_BUILDKIT=1 docker build -f Dockerfile -t test_name . 默认启用:在/etc/docker/daemon.json中设置{ "features": { "buidkit": true }}。 保留缓存 不仅保留最终镜像的缓存,还保留中间镜像的缓存。 do...
go指令大全
go指令大全
结合泛型和reflect写一个groupBy转map的工具类
1.18出来了,把之前一堆groupBy的代码拿出来用泛型改一下,效率可能略有下降,但是小频率使用,效果还行 **注:**这里的T必须是struct,而且key必须是string 123456789101112131415161718192021222324252627282930313233343536373839404142434445// GroupByMap 切片按key(字段)分组转mapfunc GroupByMap[T interface{}](values []*T, key string) map[string][]*T { mapObj := make(map[string][]*T) // 先去重 for _, groupKey := range removeRepeatedElement(values, key) { // 再过滤 arr := filter(values, key, groupKey) mapObj[groupKey] = arr } r...
结合gin配置统一结果响应,统一异常处理
定义统一响应体(包含code,msg,data和WithData/WithMsg方法)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859package configimport ( "encoding/json" "net/http")var ( // OK OK = response(http.StatusOK, "ok"))type Response struct { Code int `json:"code"` // 错误码 Msg string `json:"msg"` // 错误描述 Data interface{} `json:"data"` // 返回数据}// 自定义响应信息func (res *Res...
记录解决golang操作es时证书安全验证问题
注: go-es包使用的是https://github.com/olivere/elastic当es配置了ssl,但是证书是自签证书,那可能在操作初始化es-client时候会报这样错误 certificate signed by unknown authority 这个问题我在issue中找到了答案 可以通过配置httpclient来忽略ssl验证 最终改造结果如下 1234var client *elastic.Clientvar host = "https://192.168.56.103:9200"var userName = "elastic"var passWord = "xiaowu" 12345678910111213141516171819202122var err errorhttpClient := &http.Client{Transport: &http.Transport{ TLSClientConfig: &tls.Config{...
(Address already in use xxx) or (No buffer space available (maximum connections reached) connect)
No buffer space available (maximum connections reached?): connect Address already in use xxx 123一般可以先查看代码中是否有一些连接未关闭1. 比如es的restclient,或者其他的httpclient2. 再或者可以检查下是否有长时间占用未被释放的jdbc connection
BigDecimal工具类小记
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120...
uniq命令
语法1uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件] 参数: -c或--count 在每列旁边显示该行重复出现的次数。 -d或--repeated 仅显示重复出现的行列。 -f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。 -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。 -u或--unique 仅显示出一次的行列。 -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。 --help 显示帮助。 --version 显示版本信息。 [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据; [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
xargs命令用法
xargs 一般是和管道一起使用。 命令格式: 1somecommand |xargs -item command 参数: -a file 从文件中读入作为 stdin -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。 -p 当每次执行一个argument的时候询问一次用户。 -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。 -t 表示先打印命令,然后再执行。 -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。 -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。 -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。 -L num 从标准输入一次读取 num 行送给 command 命令。 -l 同 -L。 -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改...
