
go
文章平均质量分 81
hellozhxy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
模块级私有访问权限 internal 包的使用规则,use of internal package xxx not allowed
在 Go 1.5 及后续版本中,可以通过创建 internal 代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是第三种访问权限:模块级私有。1. GOPATH 时代具体规则是:internal 代码包中声明的公开程序实体仅能被该代码包的直接父包及其子包中的代码引用。当然,引用前需要先导入这个 internal 包。对于其他代码包,导入该 internal 包都是非法的,无法通过编译。这里的名称必须是 internal 。代码目录结构如下:wohu@wohu:~/GoCode/转载 2022-03-29 19:31:09 · 2135 阅读 · 0 评论 -
golang常用库:字段参数验证库-validator使用
一、背景#在平常开发中,特别是在web应用开发中,为了验证输入字段的合法性,都会做一些验证操作。比如对用户提交的表单字段进行验证,或者对请求的API接口字段进行验证,验证字段的合法性,保证输入字段值的安全,防止用户的恶意请求。一般的做法是用正则表达式,一个字段一个字段的进行验证。一个一个字段验证的话,写起来比较繁琐。那有没更好的方法,进行字段的合法性验证?有, 这就是下面要介绍的validator这个验证组件。代码地址:https://github.com/go-playground/val..转载 2022-03-27 18:59:24 · 5005 阅读 · 0 评论 -
Golang参数校验:go-playground/validator的缺点及替代品checker
Golang的参数校验,大多数使用的是validator(gin框架使用的是validator v8/v9)。但是,validator的缺点是,将校验的逻辑,以标签(tag)的方式写入结构体,这种方法具有很强的侵入性,并且校验逻辑不容易阅读。为此,笔者写了checker,作为validator的替代品。checker可以替代validator, 用于结构体或非结构体的参数校验。使用例子: tag 与 Rule的比较validator使用的tag,与checker的Rule的对应关系可以参考RE转载 2022-03-27 18:56:14 · 2387 阅读 · 0 评论 -
Golang 规则引擎原理及实战
本文主要介绍规则引擎在 golang 中的使用,将首先介绍 golang 中主要的规则引擎框架,然后利用 golang 原生的 parser 搭建一个简单的规则引擎实现基本的 bool 表达式解析工作。背景随着业务代码的不断迭代,诞生出了越来越多的 if-else,并且 if-else 中的逻辑越来越复杂,导致代码逻辑复杂、维护性差、可读性差、修改风险高等缺陷。复杂的 if-else 逻辑其实对应的是一条条的规则,满足对应的规则在执行对应的操作,即 if-else 中的条件就是一个对应的 boo转载 2022-03-14 16:02:33 · 7418 阅读 · 1 评论 -
基于 Go 的内置 Parser 打造轻量级规则引擎
在公司内见到无数的人在前仆后继地造规则引擎,起因比较简单,drools 之类的东西是 Java 生态的东西,与 Go 血缘不合,商业规则引擎又大多超重量级,从零开始建设的系统使用起来有很高的学习成本。刚好可能也不是很想写 CRUD,几个人一拍即合,所以就又有了造轮子的师出之名。要造一个规则引擎,说难实际上也不难。程序员们这时候捡起了学生时代的编译原理书,抄起递归下降、 lex/yacc 或者再先进一点的 antlr 之类的 parser generator 就搞了起来。造的时候说不定还发现噢噢,大多数转载 2022-03-14 14:39:57 · 1418 阅读 · 0 评论 -
govaluate
简介今天我们介绍一个比较好玩的库govaluate。govaluate与 JavaScript 中的eval功能类似,用于计算任意表达式的值。此类功能函数在 JavaScript/Python 等动态语言中比较常见。govaluate让 Go 这个编译型语言也有了这个能力!快速使用先安装:$ go get github.com/Knetic/govaluate后使用:package mainimport ( "fmt" "log" "github.com/Kn转载 2022-03-14 12:18:14 · 1865 阅读 · 1 评论 -
Gengine规则引擎
最近对B站开源的gengine规则引擎进行了入门级的研究。现在整理的资料记录如下。(欢迎交流讨论)原博客地址:https://www.cnblogs.com/feixiang-energy/p/15572292.html一:简介: Gengine是一款基于golang和AST(抽象语法树)开发的规则引擎, Gengine支持的语法是一种自定义的DSL, Gengine通过内置的解释器对规则文件进行解析,构建规则模型,进行相应的规则计算和数据处理。Gengine于2020年7月由哔哩哔哩(bi.转载 2022-03-14 12:07:57 · 4103 阅读 · 0 评论 -
Go tcp客户端、服务端编程
内容参考net包,net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。服务端在服务器端我们需要绑定服务到指定的非激活端口, 并监听此端口;当有客户端请求到达的时候可以接收到来自客户端连接的请求。package main转载 2022-02-23 15:58:43 · 935 阅读 · 0 评论 -
golang bloom filter实现
package mainimport ( "fmt" "math")type BloomFilter struct { MLength int64 //过滤器长度 MArr []int64 //过滤器数组 NCount int64 //插入元素个数 FalseRate float64 //误报率 KHash int //hash函数个数}//数学公式// k = ln2 * m /n// ...原创 2022-02-23 15:51:15 · 598 阅读 · 0 评论 -
go使用protobuf和cpp进行tcp通信
msg.protosyntax = "proto3";package MSG;option go_package = ".;MSG";message Person { string name = 1; int32 id = 2; string email = 3;}//protoc --go_out=./ ./msg.proto//protoc --cpp_out=./ ./msg.protofunc Marshal(m Message) ([]byte, er...转载 2022-02-23 15:48:10 · 584 阅读 · 0 评论 -
Go语言操作MySQL
MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。Go操作MySQL连接Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动下载依赖go get -u github.com/go-sql-driver/mysql使用MySQL驱动func Open(drive转载 2022-02-23 15:12:38 · 3377 阅读 · 1 评论 -
Go语言操作Redis
在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。Redis介绍Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。Redis支持的数据结构Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、转载 2022-02-23 15:11:26 · 2093 阅读 · 0 评论 -
go protobuf tcp 粘包处理 demo
1.安装相关包设置代理set GOPROXY=https://goproxy.cn安装golang的proto工具包go get -u github.com/golang/protobuf/proto安装goalng的proto编译支持go get -u github.com/golang/protobuf/protoc-gen-go查看 protoc 版本protoc --version2.创建项目模拟微服务开发,在某个空文件夹下建立两个文件夹分别为client...转载 2022-02-23 15:09:37 · 1006 阅读 · 0 评论 -
Golang 使用Protocol Buffer 案例
目录1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3.1 创建.proto协议文件 3.2 protobuf编解码 3.3 socket通讯 4. Protobuf 基础知识 4.1 简单模板 4.2 简单语法 4.3 注意事项 1. 前言工作几年了。ITDragon龙的编程语言从熟悉的Java,到喜欢的.转载 2022-02-23 14:47:52 · 1314 阅读 · 0 评论