
go
星空守望
个人博客 https://starstao.com
展开
-
gin https tls 禁用某些加密算法
公司的一个 https 服务被扫描出了漏洞(SSL/TLS协议信息泄露漏洞(CVE-2016-2183)),需要禁用DES加密,我用gin框架编写的https服务,找了半天没找到相关的设置,因为gin只提供了一个简单的 RunTLS(addr, certFile, keyFile string)方法。经过对源码的琢磨,终于知道怎么设置了,如下:router := gin.New()// 指定tls加密算法tlsconf := &tls.Config{ PreferServerCipher原创 2021-09-13 15:24:47 · 1563 阅读 · 0 评论 -
tcp 压测工具
因为从事服务端开发,所以想开发一款tcp相关的测试工具来进行接口以及压力测试,web前端使用了bootstrap,后端采用go语言开发。效果见下:通过浏览器访问压测工具地址,填好主机信息,添加请求数据,点击创建压测任务。创建好后,点击查看压测任务,查看任务详情。点击开始执行,执行压测任务执行结果(由于是测试的本地运行的服务端,网络延时几乎没有,时间太短了导致单次请求花费的最小时间(ms)出bug了,不过不碍事,大体数据是正确的)接下来看看tcp返回测试功能,填好主机端口,点击连接。填原创 2021-06-05 18:19:17 · 3787 阅读 · 0 评论 -
gorm mysql批量插入数据
记录下项目中自己写的批量插入数据代码/** * 获取批量添加数据sql语句 */func getBranchInsertSql(data interface{}, tableName string) (string, error) { var isArr bool dataValue := reflect.ValueOf(data) switch dataValue.Kind() { case reflect.Array, reflect.Slice: // 数组 isArr = t原创 2021-05-25 14:13:25 · 2340 阅读 · 0 评论 -
go封装的实用日志系统,附加定时生成新的日志文件功能
怎样封装一个好用且可以随时更换底层日志框架的方法呢,见下package logimport ( "fmt" "github.com/lestrrat-go/file-rotatelogs" "github.com/op/go-logging" "os" "time")var logger = logging.MustGetLogger("logger")// Example format string. Everything except the message has a cus原创 2021-04-25 16:19:53 · 608 阅读 · 0 评论 -
go 无锁(乐观锁)队列的实现
采用轻量级的CAS(Compare and swap)乐观锁,实现安全的队列,代码如下:/** * 线程安全的队列,使用轻量级的 CAS 锁 */package cas_queueimport ( "errors" "fmt" "runtime" "sync/atomic")type casCache struct { putNo uint32 getNo uint32 value interface{}}// lock free queuetype CASQueue原创 2021-04-07 14:55:26 · 1196 阅读 · 0 评论 -
golang 实用的 打印错误堆栈 的方法
有时候 golang 打印了错误日志,却发现很多地方都有打印这种日志,定位起来有点难度,有没有一些方法,在打印错误日志的时候把代码堆栈也打印出来呢?方法如下:func WrapError(wrapMsg string, err error) error { pc, file, line, ok := runtime.Caller(1) f := runtime.FuncForPC(pc) if !ok { return errors.New("WrapError 方法获取堆栈失败") }原创 2021-03-09 14:40:47 · 6693 阅读 · 0 评论 -
go极简代码将byte数组转为二进制字符串,不足8位自动填充
需要以二进制的形式查看byte数组,怎么写呢?直接上代码。func BytesToBinaryString(bs []byte) string { buf := bytes.NewBuffer([]byte{}) for _, v := range bs { buf.WriteString(fmt.Sprintf("%08b", v)) } return buf.String()}附上测试用例func TestBytesToBinaryString(t *testing.T) { t原创 2020-12-23 14:17:49 · 3048 阅读 · 0 评论