Go
ezreal_pan
这个作者很懒,什么都没留下…
展开
-
gorm.io/sharding:改造,当查询条件中不包含分表键时,从自定义方法中获取对应的表进行查询
这篇文章是一种特殊的情形——当查询条件中不包含分表键时,从自定义方法中获取对应的表进行查询。实际项目中并不建议这种用法。当然,这里只是提供一种思路。这篇文章也是这个系列中的第三篇文章。前两篇文章《》、《》有兴趣的看官可以移步过去看看。原创 2024-09-24 17:51:53 · 453 阅读 · 0 评论 -
gorm.io/sharding使用中遗留问题探究:Error 1062 (23000): Duplicate entry ‘2‘ for key ‘orders_2025.PRIMARY
实际上因为支持自定义方法,也没有必要去修改源码中的问题,只是用于探索一下其实现原理。原创 2024-09-24 11:16:25 · 401 阅读 · 0 评论 -
基于gorm.io/sharding分表中间件使用案例
项目中需要用到mysql的分表场景,调研了一些常用的分库分表中间件,比如,mycat,小米的Gaea,这两个中间件太重了,学习成本较大,另外mycat不是go写的。我们需要一个轻量级的go版本的分表中间件。所以,把目光放在了如下这个开源组件上。原创 2024-09-23 16:39:25 · 1096 阅读 · 0 评论 -
swagger报错:ParseComment error in file xxx.go :cannot find type definition: response.RR
先给出解决方案,没有兴趣了解具体的原因,以及swag的源码的可以直接看第一部分即可。命令行中增加一个参数:pdl。参数用于控制是否解析外部依赖文件夹,以及解析的级别。原创 2024-09-19 15:01:38 · 977 阅读 · 0 评论 -
开源项目timingwheel
开源的时间轮使用以及源码阅读原创 2024-09-10 15:16:44 · 680 阅读 · 0 评论 -
基于约束大于规范的想法,封装缓存组件
架构?何谓架构?好像并没有一个准确的概念。以前我觉得架构就是搭出一套完美的框架,可以让其他开发人员减少不必要的代码开发量;可以完美地实现高内聚低耦合的准则;可以尽可能地实现用最少的硬件资源,实现最高的程序效率......事实上,架构也并非只是追求这些。因为,程序是人写出来的,所以,似乎架构更多的需要考虑人这个因素。我们发现,即便我们在程序设计之初定了诸多规范,到了实际开发过程中,由于种种原因,规范并没有按照我们预想的情况落实。这个时候,我的心里突然有一个声音:约束大于规范冒了出来。原创 2024-09-03 15:58:25 · 1129 阅读 · 0 评论 -
基于kafka-go写的生产者和消费者
这一篇文章,主要是基于kafka-go写的生产者和消费者的代码。我自定义了一个kafka消息体,消息体中,有一个actionType的概念。为什么要有这么一个定义呢,主要是考虑到kafka的topic的颗粒度不能太细,太细会导致kafka的性能下降,所以,我们的消费需要基于actionType进行细分,以提升消费的并发能力,这里指的是从业务的角度来提升消费能力,而不是通过kafka自身的调整。原创 2024-08-14 15:05:13 · 464 阅读 · 0 评论 -
kafka-go使用:以及kafka一些基本概念说明
作为开发人员kafka中最常关注的几个概念,是topic,partition和group这几个概念。topic是主题的意思,简单的说topic是数据主题,这样解释好像显得很苍白,只是做了个翻译。一图胜前言,我们还是通过图解来说明。生产者负责写数据,一个topic可以有多个分区。如下图所示,生产者写数据的示意。,即消息在某个分区上是有顺序的,而全局是没有顺序的。这个意味着如果我们需要保证顺序,我们在写消息时需要往同一个分区中写数据。比如,我们有一个场景,有一个订单。原创 2024-08-09 16:33:33 · 960 阅读 · 0 评论 -
go mod模式下,import gitlab中的项目
第一步:创建一个公用包的项目,比如,core。这里有个点需要注意,不能直接用go mod init进行初始化,否则,引用该包会报路径错误的问题。需要通过这个命令进行初始化(init后面的内容实是ssh链接去掉git@)。执行完之后,push到gitlab上。公用包创建的流程到此就完成了。接下来就是引用包需要做些一些配置。第二步:第三步:需要设置两个环境变量。GOPRIVATE。原创 2024-05-23 15:55:36 · 1154 阅读 · 0 评论 -
gorm log with traceId 打印带有traceId信息的日志,通过context实现
于是乎,我们就希望有一个全局的traceId可以把一个请求过程中经过的所有链路的关键信息串联起来,这样的话在检索日志的时候可以带来极大的方便,根据traceId把整个链路上的日志全部打印出来。在初始化日志的地方,传从Context中获取对应参数的函数,比如,从context中接受traceId。我们首先需要了解gorm日志打印是如何实现的,任意找一个sql执行方法进去,比如,查询的方法。我们回到前面打印日志的地方,看打印日志的方法,打印日志的Trace方法是这个接口下的一个方法。原创 2024-05-15 16:32:10 · 886 阅读 · 0 评论 -
http请求头导致了dial tcp:lookup xxxx on 10.43.0.10:53 no sunch host
事实证明人有的时候也不能太偷懒,太偷懒容易给自己埋坑。原创 2024-04-11 15:42:19 · 639 阅读 · 0 评论 -
周期时间计算方法《二》
【代码】周期时间计算方法《二》原创 2022-08-24 17:13:14 · 417 阅读 · 1 评论 -
周期时间计算方法
【代码】周期时间计算方法。原创 2022-08-23 17:29:56 · 899 阅读 · 0 评论 -
golang编译出现问题
项目中引入了第三方包(github.com/jinzhu/copier),编译的时候出现了go: github.com/jinzhu/copier@v0.3.5: verifying go.mod: github.com/jinzhu/copier@v0.3.5/go.mod: reading http://192.168.24.11:3000/sumdb/sum.golang.org/lookup/github.com/jinzhu/copier@v0.3.5: 502 Bad Gatewaygo:原创 2022-07-01 09:55:33 · 1253 阅读 · 0 评论 -
golang 关于引用和指针的深拷贝的问题
问题现象定义一个对象,对象中嵌套定义了map类型和一个对象,复制原来的对象生成新的对象,改变新对象中map的值和嵌套的对象的值会导致原来的对象的值也被改变。现象模拟package mainimport ( "encoding/json" "fmt")type StudyCopy struct { Name string Reference map[string]interface{} Nested *Nested}type Nested struct {原创 2022-03-30 14:16:25 · 1655 阅读 · 0 评论 -
golang 匿名结构体数组对应的json结构体记录
或者原创 2021-12-15 16:43:40 · 265 阅读 · 0 评论 -
golang beego使用踩坑记录
conf文件中,数组型数据不能放在前面,会导致其他的如string型数据解析为空这种数组型数据要放到文件的最后。一不小心引入了bug,花了一天时间才往配置文件方向考虑,终于定位到问题了...原创 2021-12-02 10:48:05 · 175 阅读 · 0 评论 -
基于mongodb的进程锁设计
进程锁设计逻辑:/*数据库脚本use cloudeventserver;//----------------------------//Collectionstructureforlock//----------------------------db.getCollection("lock").drop();db.createCollection("lock");db.getCollection("lock").createIndex({"lock_ke...原创 2021-07-26 14:49:40 · 982 阅读 · 0 评论 -
各浏览器下载文件名不乱码的解决办法
转自:https://segmentfault.com/a/1190000005994758/转载 2021-06-08 18:54:43 · 1407 阅读 · 0 评论 -
golang 利用反射写excel
excel操作接口封装package excelimport ( "context" "fmt" "reflect" "strings" "github.com/360EntSecGroup-Skylar/excelize")type Field struct { Value interface{}}//excel操作接口type IExcelHandler interface { // 获取处理器标识名,用途有: // 1.根据标识名替换某个处理器 // 2.打原创 2021-05-20 10:02:04 · 319 阅读 · 0 评论 -
golang 结构体数组,多条件排序
需要重写sort包下的Interface接口方法。如下为示例:package mainimport ( "bytes" "fmt" "io/ioutil" "reflect" "sort" "time" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform")const ( FORMAT_DATETIME = "2006-01-02 15:04:05")func原创 2021-05-14 10:09:24 · 1727 阅读 · 0 评论 -
Golang 中函数作为值与类型
参考博客:https://blog.csdn.net/zchdjb/article/details/90725435package mainimport "fmt"func main() { fc := func() { fmt.Println("print fc") } fmt.Printf("fc:%T\n", fc) fc() myMsg := func(msg string) { fmt.Println("msg:", msg) } fmt.Printf("my.转载 2021-04-28 15:17:39 · 102 阅读 · 0 评论 -
golang mongodb 涉及到多字段排序
涉及到多字段排序的操作,代码结构如下,详情见注释:func makeGoodsOptions(page, pageSize int64) *options.FindOptions { //分页 limit := pageSize skip := (page - 1) * pageSize //排序 map无序,因此这样子会报错 // sortMap := make(map[string]interface{}, 0) // sortMap["update_time"] = -1 //原创 2021-04-23 16:47:31 · 3634 阅读 · 2 评论 -
multi-key map passed in for ordered parameter sort
记录一次阅读源码的过程。在使用golang mongo 查询的过程中,使用了sort进行排序,使用了多个字段进行排序。结果,返回multi-key map passed in for ordered parameter sort 这个错误。首先上网查了一下这个错误,发现没有人遇到过这样的问题。查询中,使用了find方法,以及排序,如下图所示。我看了一下源码。在源码中找到Find()方法。定位到Find()方法中,sort参数解析。从源码看,的确是不支持多个原创 2021-04-23 14:39:53 · 2415 阅读 · 2 评论 -
err:pq: at or near “?“
CockroachDB 写数据报了这个错误,是因为postgres占位符是$n,不是?参考文档:https://pkg.go.dev/github.com/lib/pqpackage mainimport ( "bytes" "context" "encoding/base64" "encoding/binary" "errors" "fmt" "log" "net/http" "os" "os/signal" "strconv" "strings" "sync"原创 2021-03-26 14:41:58 · 195 阅读 · 0 评论 -
StructToMap
package mainimport ( "fmt" "reflect" "github.com/fatih/structs")func main() { type User struct { Name string } type Server struct { Name string `json:"name,omitempty"` ID int Enabled bool Users []User `json:"users"` //htt.原创 2021-03-11 13:45:19 · 221 阅读 · 0 评论 -
golang interface to struct
package mainimport ( "errors" "fmt" "reflect")// func SetField(obj interface{}, name string, value interface{}) error {// structValue := reflect.ValueOf(obj).Elem()// structFieldValue := structValue.FieldByName(name)// if !structFieldValue..原创 2021-02-02 16:51:39 · 329 阅读 · 0 评论 -
golang interface to struct
package mainimport ( "errors" "fmt" "reflect")func SetField(obj interface{}, name string, value interface{}) error { structValue := reflect.ValueOf(obj).Elem() structFieldValue := structValue.FieldByName(name) if !structFieldValue.IsValid() {.转载 2021-02-02 16:24:47 · 412 阅读 · 0 评论 -
golang struct to map
/*This function will help you to convert your object from struct to map[string]interface{} based on your JSON tag in your structs.Example how to use posted in sample_test.go file.*/func structToMap(item interface{}) map[string]interface{} { res := m.原创 2021-02-01 16:59:30 · 271 阅读 · 0 评论 -
Error #01: invalid character ‘\x1f‘ looking for beginning of value
package serverimport ( "bytes" "compress/gzip" "encoding/json" "fmt" "io" "io/ioutil" "net/http" "strconv" "strings" "time" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "next-stage.com.cn/mercury-backend/api" "next-stage.com.c.原创 2020-10-22 10:04:30 · 2764 阅读 · 0 评论 -
ListToTree golang
// Team ...type Team struct { //Core ID int64 `json:"id,string" db:"id"` ClusterID int64 `json:"clusterId,string" db:"cluster_id"` ParentID int64 `json:"parentId,string" db:"parent_id"` CreatedAt int64 `json:"createdAt,string" db:"cre..原创 2020-10-15 14:37:26 · 286 阅读 · 0 评论 -
golang 透明代理
package mainimport ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" "net/http/httputil" "net/url" "os")type requestPayloadStruct struct { ProxyCondition string `json:"proxy_condition"`}// Get env var or defaultfunc getEnv(ke.原创 2020-06-03 18:27:36 · 1097 阅读 · 3 评论 -
golang gin download and upload file
func main() { router := gin.Default() router.GET("/api/v1/attachments/:file",DownloadAttachmentHandler) router.POST("/api/v1/attachment/files", UploadAttachmentFileHandler) // Listen and serve on 0.0.0.0:8080 r.Run(":8080")}// Uplo.原创 2020-06-03 18:10:45 · 3396 阅读 · 0 评论 -
How to log response and request body in gin
func main() { r := gin.New() r.Use(UploadRetrievalLog()) router.GET("/api/v1/ping", func(c *gin.Context) { c.String(200, "pong") }) // Listen and serve on 0.0.0.0:8080 r.Run(":8080")}type bodyWriter struct { gin.ResponseWrite.原创 2020-05-28 13:40:45 · 1332 阅读 · 0 评论 -
go_package 别名问题记录
syntax = "proto3";package entity.v5;option go_package = "next-stage.com.cn/apatodon/protocol/entity/v5;entity.v5";import "google/api/annotations.proto";import "google/protobuf/wrappers.prot...原创 2020-04-21 16:41:09 · 4744 阅读 · 1 评论 -
golang list to tree
// You can edit this code!// Click here and start typing.package mainimport ( "encoding/json" "log")//树type Tree struct { List map[int]*Node Children map[int]Node Parents map[int]No...原创 2020-03-25 10:20:04 · 1418 阅读 · 0 评论 -
golang遍历FTP文件夹
package ftpimport ( "fmt" "github.com/jlaffaye/ftp")//SourceManager ...type SourceManager struct { conn *ftp.ServerConn}// EntryHandler 遍历ftp目录时的文件handler// EntryHandler ...type EntryH...原创 2019-11-08 11:04:34 · 1751 阅读 · 0 评论 -
golang package学习总结
省略调用(不建议使用):package mainimport . "fmt"func main() { // 调用的时候只需要Println(),而不需要fmt.Println() Println("省略调用")}使用别名调用包中的函数:package mainimport f "fmt"func main() { //使用别名调用包中的函数,调用的时候只需...原创 2019-04-10 10:35:21 · 138 阅读 · 0 评论 -
golang interface学习总结
package mainimport ( "fmt" "math")//interface可以实现泛型编程//简单的说,interface是一组method的组合//interface 可以实现泛型编程type geometry interface { calculatearea() float64 calculateperim() float64}type rect...原创 2019-04-10 10:05:03 · 192 阅读 · 0 评论 -
理解go的function types
转自:作者:咕咕鷄链接:https://www.jianshu.com/p/fc4902159cf5来源:简书今天看Martini文档,其功能列表提到完全兼容http.HandlerFunc接口,就去查阅了Go: net/http的文档,看到type HandlerFunc这部分,顿时蒙圈了。由于之前学习的时候没有关注过function types的知识点,就Google了一些文章,才...转载 2019-03-26 15:26:09 · 148 阅读 · 0 评论