参考了这篇帖子:golang protobuf从生成的json标记中删除omitempty标记 由于是在windows上开发,因此写了一个python脚本来解决: remove_tag.py import sys def main(): argc = len(sys.argv) if argc<2: print('usage:%s <xxx.go>'%sys.argv[0]) return f = open(sys.argv[1], 'rb') if not f: print("…
代码中使用了类似的方式来向模板填充参数: c.HTML(200, "list.html", gin.H{"data":builder.String()}) 模板中的语法大致如下: <html> <h1>{{ .data }}</h1> </html> 发现我输入的内容都做了HTML转义. 如何不转义呢?解决方法很简单: import ("html/template") c.HTML(200, &qu…
编译的过程中出现了一个吓人的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhang\go #gosetup C:\Go\bin\go.exe mod tidy #gosetup go: downloading github.com/xxx/my_prj/public v0.0.14 github.com/xxx/my_prj/proxy_alloc_svr/cmd imports github.com/xxx/my_prj/public/pkg/b…
在项目中的go.mod文件中有这样一句: require ( github.com/xxx-devops/xx1/sdk/go v2.2.3 ) 项目的编译没有问题,但是goland中出现如下提示: go: errors parsing go.mod: D:/source/github/ahfuzhang/go.lib/go.mod:8: require github.com/xxx-devops/xx1/sdk/go: version "v2.2.3" invalid: module…
代码中的这一句使用prometheus2.28.0版本的代码: import "github.com/prometheus/prometheus/prompb" 我把require github.com/prometheus/prometheus v2.5.0+incompatible修改为github.com/prometheus/prometheus v2.28.0 于是出现了下面的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhan…
发现在如下代码中存储kafka生产者初始化失败: config.Version = sarama.V0_10_2_1 //V2_2_0_0 producer, err := sarama.NewSyncProducer(options.Kafka.KafkaBrokerList, config) if err != nil { log.Printf("sarama.NewSyncProducer fail:%+v, list=%+v\n", err, options.Kafka.Kaf…
代码中使用XORM来从数据库查询数据,有类似如下的代码: session.Where("id in (?)", strings,Join(arr, ",")) 发现:当arr中的ID个数大于1时,查询不出来任何数据. 于是修改为: session.Where(fmt.Sprintf("id in (%s)", strings,Join(arr, ","))) 问题解决.…
replace github.com/sxxx/common_lib/src/ => ../../common_lib/src 修改成 replace github.com/sxxx/common_lib/src => ../../common_lib/src 后,replace才生效了.…
我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx.com/myprj/mylib v0.0.43 git.xxx.com/myprj/mylib/src v0.0.0-20200717121459-edb92ac57b65 ) 可是我并不想要这个最新的版本.怎么办? 这篇帖子提到了一个解决办法:<再探go modules:使用与细节>https:…
VM体系还真的是不一(he)样(qun), 它上报的监控数据长这样: vmagent_remotewrite_block_size_rows_bucket{vmrange="2.448e+03...2.783e+03"} 3 vmagent_remotewrite_block_size_rows_bucket{vmrange="3.594e+03...4.084e+03"} 8 vmagent_remotewrite_block_size_rows_bucket{v…
直接上答案: date -d@"$(( `date +%s`-86400))" +"%Y-%m-%d"…
如果在启动 alert manager的时候,不填写参数: /usr/bin/alertmanager --config.file=/etc/alert_manager/alertmanager.yaml --storage.path=/var/alert_manager/data --data.retention=24h --web.listen-address=0.0.0.0:9093 --cluster.listen-address=0.0.0.0:9094 那么alert manager…
从vmselect查询的时候,出现如下错误: error when executing query="up" on the time range (start=1639388706000, end=1639392306000, step=1441): cannot execute query: cannot evaluate "up": error occured during search: cannot fetch query results from vmst…
POST到数据到一条gin框架的接口后,客户端收到400错误,并且返回了业务中返回的"decode json fail". 关键代码是: func report(c *gin.Context) { req := pb.ReportRequest{} err := c.BindJSON(&req) if err != nil { c.JSON(200, gin.H{"code":1,"msg":"decode json fail&…
在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Office Excel组件来实现数据訪问的,效率十分令人不满.一个端游项目一般要上百个表格,手游项目20.30个表格基本也是要的,于是表格导入程序的过程一般要几分钟.项目后期要接近半个小时. 此次分享的小工具,在速度上有质的飞越,比上述方法实现的工具有接近100倍的速度提升: 可运行版本号下载:http:…
在mac下不是很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直在搜索,无果. 今天去官方论坛看了一下,发现了一个设置: ”open_files_in_new_window”: true,将其设置成false就OK了,会在当前窗口中打开文件 具体设置:Preferences -> Settings – Default  ->  搜索open_files_in_…
这个问题总结起来就是去掉字符串中的最后一个"," 字符串:string s = "1,2,3,4,5," 目标:删除最后一个 "," 方法:1.用的最多的是Substring,这个也是我一直用的s = s.Substring(0,s.Length - 1)2.用TrimEnd,这个东西传递的是一个字符数组 s=s.TrimEnd(',')//如果要删除"5,",则需要这么写char[] MyChar = {'5',','};s…
欢迎来到 protocol buffers 的开发者指南.protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法. 本文档主要针对的是 Java,C++ 或 Python 的开发人员希望在开发的应用程序中使用 Protocol Buffers.这个有关 Protocol Buffers 摘要性的介绍将会告诉你如何开始使用 Protocol Buffers.如果你希望更加深入的了解有关 Protocol Buffers 的内容,…
什么是 protocol buffers ? Protocol buffers 是一种灵活.高效的序列化结构数据的自动机制--想想XML,但是它更小,更快,更简单.你只需要把你需要怎样结构化你的数据定义一次,你就能使用特殊生成的代码来方便的用多种语言从一系列数据流中读写你的结构化数据.你甚至不需要中断你用"老"结构编译好的已经部署的程序来更新你的数据结构. 它是怎样工作的? 你在一个名为.proto的文件里用protocol buffer message 定义你需要序列化数据的结构.每…
原话题: 是关于一个left join的,没有技术难度,但不想清楚不一定能回答出正确答案来: TabA表有三个字段Id,Col1,Col2 且里面有一条数据1,1,2 TabB表有两个字段Id,Col1且里面有四条数据 1,1 2,2 3,2 4,2 问题: 如下语句会返回多少条数据? 在不写测试脚本的情况下,如果你能在5分钟内准备回答出答案,且能说出些所以然来(及不是凭感觉猜出来的结果),那么请继续看后面的问题. Select * from TabA a Left join TabB b1 o…
微信小程序如何跳转到另一个小程序,要注意:在app.json文件里也要配置 navigateToMiniProgramAppIdList,如下图: "navigateToMiniProgramAppIdList": [ "wxc7984fb04ae38871" ] 试过这样写是没有问题: 代码: <navigator class='public_fixed' target="miniProgram" app-id="wxc7984…
学习Spring框架,通过事务管理的方式搭建一个小的项目,该项目可以查询对数据库中的图书库存数量进行修改. 首先,使用MVC分层的设计模式思想搭建项目目录结构. 此部分代码源码之中都有相关注释,所以尽情附上源码. 首先Dao层的源码: package com.jredu.book.Dao; public interface BookDao { /** * 通过编号查询书的价格 * @param isbn * @return */ int findBookPriceByIsbn(String is…
背景 一个简单的代理程序,发现单核QPS达到2万/s左右就上不去了,40%的CPU消耗在pb的decode/encode上面. 于是我想,对于特定的场景,直接从[]byte中取出字段,而不用完全的把整个结构在内存展开,岂不是要快很多. so, 温习了一些PB二进制格式的知识. pb的二进制格式: 参考的文章有: Google Protobuf 编码原理 Protocol Buffers(3):阅读一个二进制文件 几个关键点总结如下: 5 bit的 field index 3 bit的wire t…
go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int   然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会默认它的类型 下面看一段代码,我们先声明一个变量a,然后再重新声明变量a,b,在这个函数中,变量a被声明了2次,成为a的重声明(redeclare),执行结果为23 package main import ( "fmt" ) func main(){ a:=1 a,b:=2,3 fmt.P…
解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如以下错误: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVzdF9zdXBlcm1hbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=&…
Protocol Buffers(Protobuf)开发者指南---概览 欢迎来到protocol buffers的开发者指南文档,protocol buffers是一个与编程语言无关‘.系统平台无关.可扩展的结构化数据序列化/反序列化工具,适用于通讯协议,数据存储等场合. ps:为了方便拼写,下文的protobuf就是指protocol buffers. 本文档的面向读者是:希望使用protobuf的 Java.C++.Python的开发者.此概览将向您介绍如何开始使用protobuf,然后您…
Protocol Buffers编码详解,例子,图解 本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路.如果你详细了解此文,你应该就能具备自己造一套编解码轮子的能力(至少基本思路). 测试的例子 阅读图片时请对比前面的例子和表格.每个字段的名称都是包含了tag的. message S2 { optional int32 s2_1 =…
目录 Message Structure 解码代码一窥 varint Protobuf中的整数和浮点数 Length-delimited相关类型 小结 参考 博客:blog.shinelee.me | 博客园 | CSDN Message Structure 在上一篇文章中我们提到,对于序列化后字节流,需要回答的一个重要问题是"从哪里到哪里是哪个数据成员". message中每一个field的格式为: required/optional/repeated FieldType Field…
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com protobuf Protocol Buffers 简介 案例 目录 目录简介优缺点proto3简介使用步骤下载 protobuf 编译器编写 .proto 文件编译 .proto 文件生成 java 类项目中添加 protobuf runtime测试 java 类在 Android 中使…
Protocol Buffers是Google开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储.通信协议等方面. 不了解Protocol Buffers的同学可以把它理解为更快.更简单.更小的JSON或者XML,区别在于Protocol Buffers是二进制格式,而JSON和XML是文本格式. 相对于XML,Protocol Buffers的具有如下几个优点: 简洁 体积小:消息大小只需要XML的1/10 - 1/3: 速度快:解析速度比XML快20 - 100倍: 使用Proto…