
go
文章平均质量分 77
luslin1711
这个作者很懒,什么都没留下…
展开
-
mysql Cant create more than max_prepared_stmt_count statements错误
错误原因当缓存的预编译SQL数量超过默认最大值时 就会产生如上错误 导致数据库直接无法使用检查查询数据库预编译SQL创建次数show global status like 'com_stmt%';每个连接创建的预编译语句有限, 需要着重检查是否出现动态测试代码:func TestPrepare(t *testing.T) { var wg sync.WaitGroup txn := sql.TxOptions{sql.LevelDefault,false} tx, err := db原创 2020-06-04 11:45:35 · 1060 阅读 · 0 评论 -
golang微服务框架go-micro使用 (六) Config And Errors
Config特征1 动态加载:根据需要动态加载多个资源文件。 go config 在后台管理并监控配置文件,并自动更新到内存中2 资源可插拔: 从任意数量的源中进行选择以加载和合并配置。后台资源源被抽象为内部使用的标准格式,并通过编码器进行解码。源可以是环境变量,标志,文件,etcd,k8s configmap等3 可合并的配置:如果指定了多种配置,它们会合并到一个视图中。4 监控变化:可以选择是否监控配置的指定值,热重启5 安全恢复: 万一配置加载错误或者由于未知原因而清除,可以指定回退值进原创 2020-05-25 15:53:04 · 931 阅读 · 0 评论 -
golang微服务框架go-micro使用 (五) Message Broker
前一篇文章,我们讨论了在micro中如何发布/订阅消息。它的优点是简单,缺点是缺乏灵活性。如果你想使用底层去发送与接收消息,需要使用接口:github.com/micro/go-micro/v2/broker.Broker这个接口是micro异步消息处理的核心,事实上,发布/订阅也依赖它下面,使用一个例子来使用Brokerpackage mainimport ( "fmt" "github.com/micro/go-micro/v2" "github.com/micro/go-micro/v原创 2020-05-25 11:17:05 · 963 阅读 · 1 评论 -
golang微服务框架go-micro使用 (四) Pub/Sub
订阅消息首先,我们定义消息处理程序,./subscriber/micro.go:package subscriberimport ( "context" log "github.com/micro/go-micro/v2/logger" "micro-hello/proto/hello")type Micro struct{}func (e *Micro) Handle(ctx context.Context, msg *hello.Message) error { log.Inf原创 2020-05-25 09:50:04 · 1071 阅读 · 0 评论 -
golang微服务框架go-micro使用 (三) Call a service
通过命令行工具调用服务luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro list servicescom.foo.service.microgo.micro.webmicro.http.brokercom.foo.service.micro 是我们的目标服务,micro.http.broker 是默认的中间件服务。在调用前,使用get命令查看服务的详情,端点定义,元数据和节点信息等luslin@local:~/software原创 2020-05-24 14:27:49 · 1446 阅读 · 1 评论 -
golang微服务框架go-micro使用 (二) Ultimate Guide For Bootstrap
main.go 说明package mainimport ( "github.com/micro/go-micro/v2" log "github.com/micro/go-micro/v2/logger" "micro-hello/handler" hello "micro-hello/proto/hello" "micro-hello/subscriber")func main() { // New Service service := micro.NewService(原创 2020-05-23 14:43:33 · 1070 阅读 · 0 评论 -
golang微服务框架go-micro使用 (一) Getting Started
文档不断更新的文档,需要翻墙官方文档服务发现服务发现是每个分布式系统都需要解决的问题,go-micro将这个任务抽象到一个接口中,原创 2020-05-22 10:56:50 · 981 阅读 · 0 评论 -
golang微服务框架Kratos使用
简介项目地址:https://github.com/go-kratos/kratos项目致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套Kratos框架也是不错的学习仓库,可以了解和参考到bilibili在微服务方面的技术积累和经验。Quick startRequirmentsGo version>=1.13InstallationGO111MODULE=on && go g原创 2020-05-21 16:32:35 · 6472 阅读 · 0 评论 -
使用go-micro/etcd 报错undefined: resolver.BuildOption resolver.ResolveNowOption balancer.PickOptions...
如图, 在写完简单的demo文件后,发现报错了。# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint../../../../../pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption../../../../...原创 2020-05-21 14:24:55 · 1162 阅读 · 2 评论 -
go-kratos 微服务框架 warden模块使用
pb文件创建项目成功后,进入api目录下可以看到api.proto文件:option go_package = "api";option (gogoproto.goproto_getters_all) = false;service RPCDemo { rpc Ping(.google.protobuf.Empty) returns (.google.protobuf.Empty); rpc SayHello(HelloReq) returns (.google.protobuf.Empt原创 2020-05-20 16:31:27 · 2604 阅读 · 0 评论 -
go-kratos 微服务框架 bm 模块使用
路由创建项目成功后,进入internal/server/http目录下,打开http.go文件,其中有默认生成的blademaster模板。其中:func New(s api.DemoServer) (engine *bm.Engine, err error) { var ( cfg bm.ServerConfig ct paladin.TOML ) if err = paladin.Get("http.toml").Unmarshal(&ct); err != nil { r原创 2020-05-19 11:17:22 · 3403 阅读 · 0 评论 -
memcached 使用 / go 操作memcached (gomemcache) / python 操作 memcached (python-memcached)
简介Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果安装这里使用docker安装docker-compose.yaml version: "3.7" services: memcached: image: memcached ports: - 21211:11211原创 2020-05-18 11:34:27 · 1716 阅读 · 0 评论 -
go 依赖注入工具( go-wire )使用(二 用户指南)
go 依赖注入工具( go-wire )使用(二 用户指南)wire 有两个核心概念: 提供者与注入者提供者providersproviders 是一个能够返回值的方法:package foobarbaztype Foo struct { X int}func ProvideFoo() Foo { return Foo{X: 42}}type Bar struct { X int}func ProvideBar(foo Foo) Bar { return Bar{X: -原创 2020-05-16 10:50:07 · 2194 阅读 · 0 评论 -
go 依赖注入工具( go-wire )使用(一 讲解)
go 依赖注入工具( go-wire )使用(一 讲解)项目地址:github.com/google/wire简介wire是 Google 开源的一个依赖注入工具。它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告诉wire类型之间的依赖关系,它会自动帮我们生成代码,帮助我们创建指定类型的对象,并组装它的依赖。使用1. 简单例子:一个普通的符合依赖注入设计原理的例子:package daoimport ( "errors" "fmt" "time")type原创 2020-05-15 16:26:38 · 3655 阅读 · 3 评论 -
toml文及其解析方法(golang)
toml文及其解析方法(golang)tomal简介参考文档:https://github.com/toml-lang/toml#user-content-offset-date-timeTOML 旨在成为一个语义显著而易于阅读的最低限度的配置文件格式。TOML 被设计地能够无歧义地转化为哈希表。TOML 应当能简单地解析成形形色色的语言中的数据结构。TOML 是大小写敏感的。TOML 文件必须是有效的 UTF-8 编码的 Unicode 文档。空白的意思是 Tab(0x09)或空格(0x2原创 2020-05-15 11:48:14 · 4879 阅读 · 3 评论 -
go net/http 源码阅读
go net/http 源码阅读实现一个简单的http服务器:package net_httpimport ( "net/http" "testing")func index(response http.ResponseWriter, request *http.Request) { response.WriteHeader(http.StatusOK) response.Write([]byte("index"))}func TestHttpServer(t *testing原创 2020-05-14 15:18:55 · 1435 阅读 · 0 评论 -
使用go net 实现简单的redis通信协议
使用go net 实现简单的redis通信协议图解redis通信协议(转自:https://www.jianshu.com/p/f670dfc9409b)请求协议:请求协议一般格式:*<参数数量> CR LF$<参数 1 的字节数量> CR LF<参数 1 的数据> CR LF...$<参数 N 的字节数量> CR LF<参数 N 的数据> CR LF例如,一个登录命令:*2 2-> 参数数量原创 2020-05-13 14:08:56 · 1167 阅读 · 0 评论 -
golang 操作 redis(github.com/go-redis/redis 包使用)
go-redis/redis 使用go-redis 是go用来链接redis数据库的包。截止当前时间github上star 8.7k环境:gogo-redisgo1.13.5v6.15.7+incompatible安装:使用go mod 进行安装在go.mod 中加入:module github.com/luslin/toolsgo 1.13requir...原创 2020-05-07 17:10:38 · 6681 阅读 · 0 评论 -
golang操作mysql(go-sql-driver 包使用)
go-sql-driver 使用go-sql-driver 是go用来链接mysql数据库的包。截止当前时间github上star 9.3k环境:gogo-sql-drivergo1.13.5v1.5.0安装:使用go mod 进行安装在go.mod 中加入:module github.com/luslin/toolsgo 1.13require ( ...原创 2020-05-03 11:34:24 · 8303 阅读 · 1 评论 -
使用单例模式封装go-kafka链接(github.com/Shopify/sarama)
package kafkaimport (“errors”“github.com/Shopify/sarama”“github.com/luslin/webs/src/server1/conf”“github.com/luslin/webs/src/server1/dbsource/redis”“github.com/prometheus/common/log”“sync”)va...原创 2020-05-04 09:41:21 · 3110 阅读 · 0 评论 -
go json包 json、json-iterator、gjson使用
go json包 json、json-iterator、gjson、easyjson使用区别:json 是go自带的json编码与解码包。json-iterator是目前github上star最多的json编码与解码包。效率高。并且可以通过简单的代码替换官方json方法。gjson则用来进行json解码,或者从json中获取数据。没有编码方法easyjson则通过预先生成编码与解码方...原创 2020-04-29 21:45:34 · 2353 阅读 · 0 评论 -
go 操作kafka包 sarama (Producer流程)
go 操作kafka包 sarama (Producer流程)代码:package mainimport ( "github.com/Shopify/sarama" "log" "os" "os/signal" "sync" "time")func main() { var ( wg sync.WaitGroup success_num, error_num ...原创 2020-04-29 12:58:06 · 5296 阅读 · 1 评论 -
go语言学习(第九章,包结构)(go 语言学习笔记)
9.1 工作空间依照规范,工作空间由src、bin、pkg三个目录组成。通常需要将空间路径添加到GOPATH环境变量列表中,以便相关工具能正常工作。在空间目录中,包括子包在内的所有源码文件都保存在src目录下。至于bin、pkg两个目录,其主要影响go install/get 命令,它们会将编译结果(可执行文件或静态库)安装到这两个目录下,以实现增量编译。环境变量编译器等相关工具按GOP...翻译 2019-06-21 09:39:51 · 185 阅读 · 0 评论 -
go语言学习(第五章,数据)(go 语言学习笔记)
5.1 字符串字符串是不可变字节(byte)序列,其本身是一个复合结构type stringStruct struct{ str unsafe.Pointer len int}头部指针指向字节数组,但没有NULL结尾。默认以UTF-8编码存储Unicode字符,字面量里允许使用十六进制、八进制和UTF编码格式。func main() { s := "雨痕\x61\142\u004...翻译 2019-06-21 09:37:45 · 321 阅读 · 0 评论 -
go语言学习(第八章,并发)(go 语言学习笔记)
8.1 并发的含义并发:逻辑上具备同时处理多个任务的能力并行:物理在同一时刻执行多个并发任务我们通常会说程序是并发设计的,也就是说,它允许多个任务同时执行,但实际上并不一定真的在同一时刻发生,在单核处理器上,它们能以间隔方式切换执行,而并行则依赖多核处理器等物理设备,让多个任务真正在同一时刻执行,它代表了当前程序运行状态。简单点说,并行是并发设计的理想模式。多线程或多进程是并行的基本条件...翻译 2019-06-21 09:30:16 · 1733 阅读 · 0 评论 -
go语言学习(第三章,表达式)(go 语言学习笔记)
3.1 保留字Go语言仅25个保留关键字,关键字不能用作常量、变量、函数名、以及结构体等标识符3.2 运算符除位移运算符外,操作数据类型必须相同。如果其中一个是无显示类型声明的常量,那么它会自动转型package mainimport &amp;quot;fmt&amp;quot;func main() { const v = 20 var a byte = 10 d := a + v fmt.Printf(...翻译 2019-06-21 09:36:45 · 311 阅读 · 0 评论 -
go语言学习(第四章,函数)(go 语言学习笔记)
4.1 定义函数是结构化编程的最小模块单元。它将复杂的算法过程分解成若干较小任务,隐藏相关细节,使程序结构更加清晰,易于维护。函数被设计成相对独立,通过接收输入参数完成一段算法指令,输出或存储相关结果。因此,函数还是代码复用和测试的基本单元。关键字func用于定义函数。Go中的函数有些不太方便的限制,但也借鉴了动态语言的某些优点。无需前置声明不支持命名嵌套定义不支持同名函数重载不支持...翻译 2019-06-21 09:37:10 · 204 阅读 · 0 评论 -
go语言学习(第六章,方法)(go 语言学习笔记)
6.1 定义方法是与对象实例绑定的特殊函数。方法是面对对象编程的基本概念,用于维护和展示对象的自身状态。对象是内敛的,每个实例都有各自不同的独立特征,以属性和方法来暴露对外通信接口。普通函数则专注于算法流程,通过接收参数来完成特定逻辑运算,并返回最终结果。换句话说,方法是有关联状态的,而函数通常没有。方法和函数定义语法区别的在于前者有前置实例接收参数(receiver),编译器以此确定方法所...翻译 2019-06-21 09:35:26 · 1181 阅读 · 0 评论 -
go语言学习(第十一章,测试)(go 语言学习笔记)
11.1 单元测试单元测试(unit test)除用来测试逻辑算法是否符合预期外,还承担着监控代码质量的责任。任何时候都可用简单的命令来验证全部功能,找出未完成任务(验收)和任何因修改而造成的错误。它与性能测试、代码覆盖率等一起保障了代码总是在可控范围内,这远比形式化的人工检查有用的多。单元测试并非要取代人工代码审核,实际上它也无法切入到代码实现层面。但可通过测试结果为审查提供筛选依据,避免因...翻译 2019-06-21 09:33:44 · 221 阅读 · 0 评论 -
go语言学习(第七章,接口)(go 语言学习笔记)
7.1 定义接口代表一种调用契约,是多个方法声明的集合。在某些动态语言中,接口(interface)也被称为协议。准备交互的双方,共同遵守事先约定的规则,使得在无须直到对方身份的情况下进行协作。接口要实现的是做什么,而不关心怎么做,谁来做。接口解除了类型依赖,有助于减少用户可视方法,屏蔽内部结构和实现细节。似乎好处很多,但这并不意味着可以滥用接口,毕竟接口实现机制会有运行期间开销。对于相同包...翻译 2019-06-21 09:33:13 · 224 阅读 · 0 评论 -
go语言学习(第十章,反射)(go 语言学习笔记)
10.1 类型反射(reflect)让我们再运行期间探知对象的类型信息和内存结构,这从一定程度上弥补了静态语言在动态行为上的不足。同时,反射还是实现元编程的重要手段。和C数据结构一样,Go对象头部并没有类型指针,通过其自身是无法在运行期间获知任何类型相关信息的。反射操作所需要的全部信息都源自接口变量。接口变量除存储自身类型外,还会保存实际对象的类型数据。func Typeof(i inter...翻译 2019-06-21 09:36:10 · 1431 阅读 · 0 评论 -
golang easyJson 包的使用
golang easyJson 包的使用easyjson 是用来快速进行json序列化与反序列化的工具包,通过给我们要进行序列化的struct生成方法来实现不通过反射进行json序列化,对比golang原有json工具包,性能能够提高3倍以上。github地址:https://github.com/mailru/easyjson一 安装: 官网推荐使用:# installgo ge...原创 2019-05-15 20:38:55 · 6884 阅读 · 1 评论 -
性能分析工具pprof与图形展示go-torch的使用
性能分析工具pprof与图形展示go-torch的使用一 准备安装graphviz# ubuntusudo apt install graphviz# centossudo yum install graphviz将GOPATH/bin加入GOPATH/bin 加入GOPATH/bin加入PATH下安装go-torchgo get -u github.com/ube...原创 2019-05-21 09:45:39 · 2997 阅读 · 0 评论 -
golang 操作etcd数据库
etcd数据库使用重要特性:底层储存是按key有序排列的,可以顺序遍历。因为key是有序的,所以etcd天然支持按目录结构高效遍历支持复杂事务,提供类似if…then…else…的事务能力基于租约机制实现key的TTL过期MVCC多版本控制:同key维护多个历史版本,用于实现watch机制。监听KV变化。一 集群部署(docker):参考:https:...原创 2019-06-21 09:29:16 · 2782 阅读 · 0 评论 -
go语言学习(第二章,类型)(go 语言学习笔记)
第二章 类型2.1 变量定义用关键字var定义变量,变量类型放在后面,运行时自动初始化为二进制零值,避免出现不可预测行为,如果显示提供初始化值,可以省略变量类型,由编译器推断var x int // 自动初始化为 0var y = false // 自动推断为bool类型可以一次定义多个变量,初始化不同类型var x,y intvar a,s = 100, &amp;quot;aaa&amp;quot;惯例...翻译 2019-06-21 09:37:29 · 195 阅读 · 0 评论