生成web和微服务代码工具sponge

sponge是一个微服务框架,一个快速创建web和微服务代码工具。sponge拥有丰富的生成代码命令,一共生成12种不同功能代码,这些功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。微服务代码功能包括日志、服务注册与发现、注册中心、限流、熔断、链路跟踪、指标监控、pprof性能分析、统计、缓存、CICD等功能。代码解耦模块化设计,包括了从开发到部署完整工程,常用代码和脚本是自动生成,只需在按照代码模板去编写业务逻辑代码,使得开发效率提高不少。github:https://github.c[...]

继续阅读 »

go test命令

gotest命令只运行单元测试,添加-bench=.参数,gotest同时执行单元测试和基准测试,当然可以通过正则过滤只运行基准测试,例如-bench=^Benchmark。添加-conver参数展示测试覆盖率。测试代码测试5种字符串拼接效果,共两个文件splice.go和splice_test.gosplice.go文件内容如下:packagespliceimport("bytes""fmt""strings[...]

继续阅读 »

go应用程序性能分析

1介绍pprof是一个可视化和分析数据的工具,pprof读取profile.proto格式的分析样本集合并生成报告以可视化和帮助分析数据,它可以生成文本和图形报告,是用来分析应用程序的性能重要工具,也可以作为其他用途,例如查看反汇编、和Linuxperf工具结合使用。2安装golang本身自带pprof工具,pprof可视化时需要依赖[...]

继续阅读 »

channel原理和应用

channel是一个数据管道,是goroutine之间数据通信桥梁,是线程安全的。channel分为有缓冲和无缓冲两种类型,其实无缓冲类型可以理解为有缓冲的一种特殊情况。1channel工作原理源码go/src/runtime/chan.gotypehchanstruct{qcountuint//当前队列中剩余元素个数dataqsizuint//环形队列长度,即缓冲区的大小,即make(chanT,N),N.bufunsafe.Pointer//环形队列指针elemsizeuint16//每个[...]

继续阅读 »

go runtime

#runtime#GMP#goroutinego语言组成有两部分,一部分是用户程序代码,一部分是runtime,runtime作用是为了实现额外功能,在程序运行时自动加载/运行的的一些模块,runtime由4部分组成:Scheduler:调度器管理所有的GMP,在后台执行调度循环。MemoryManagement:当代码需要内存时,负责内存分配工作。GarbageCollector:当内存不再需要时,负责回收内存。Netpoll:网络轮询负责管理网络FD相关的读写、就绪事件。调度器Scheduler协程调度器GMP

继续阅读 »

go调试工具

go调试工具1概念Delve是一个用于Go程序的源码级调试器,通过控制程序的执行与你的程序互动,评估变量,并提供线程/goroutine状态、CPU寄存器状态等信息,目标是为调试Go程序提供一个简单而强大的接口。使用方法:dlv[command]可用的命令:attach连接到正在运行的进程并开始调试。connect连接到一个无头调试服务器。core检查一个核心转储。dap[EXPERIMENTAL]启动一个通过DebugAdaptorProtocol(DAP)通信的TCP服务器。debug[...]

继续阅读 »

cobra

1基本概念Cobra是Go的CLI框架,它包含一个用于创建强大的现代CLI应用程序的库和一个用于快速生成基于Cobra的应用程序和命令文件的工具。Cobra基于三个基本概念commands,arguments和flags,其中commands代表行为,arguments代表数值,flags代表对行为的改变,命令使用示例:APPNAMEVERBNOUN--ADJECTIVE#或者APPNAMECOMMANDARG--FLAG#server是commands,port是flaghugoserver--port=1313#clone是comm[...]

继续阅读 »

gprc使用实践

1grpc概述grpc是一个高性能、开源的rpc框架,目前提供了多种语言版本,基于HTTP/2标准设计,拥有双向流、流控、头部压缩、单TCP连接上的多复用请求特性,接口描述语言使用protobuf。在grpc中,一共有四种调用方式:一元RPC(unaryRPC):称为单次RPC,也就是一问一答RPC请求,是最基础最常用的调用方式。服务端流式RPC(Server-sideStreamingRPC):是一个单向流,客户端发起一次普通RPC请求,服务端通过流式返回数据集。客户端流式RPC(Client-sideStrea[...]

继续阅读 »

配置文件viper库

1viper概述viper是Go应用程序的完整配置解决方案。在构建现代化应用程序的过程中,开发人员可以通过使用viper而不必考虑配置文件的格式问题,可以被认为是所有应用程序配置需求的注册表。它支持功能:设置默认值从JSON,TOML,YAML,HCL和Java属性配置文件中读取实时观看和重新读取配置文件(可选)从环境变量中读取从远程配置系统(etcd或Consul)读取,并观察变化从命令行标志读取从缓冲区读取设置显式值

继续阅读 »

TLS和SSL

1.1TLS/SSL基本概念SSL(SecureSocketLayer安全套接层)是基于HTTPS下的一个协议加密层,起初是因为HTTP在传输数据时使用的是明文,是不安全的,为了解决这一隐患网景公司(Netscape)推出了SSL安全套接字协议层,SSL是基于HTTP标准并对TCP传输数据时进行加密,在HTTP和TCP之间,所以HPPTS是HTTP+SSL/TCP的简称。TLS(TransportLayerSecurity)是传输层安全性协议,是IETF把SSL经过标准化的传输协议,可以看作是SSL的升级版,目的是保障互联网通信提供安全性和数据完整性。事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼。目前应用最广泛的是TLS1.0,但是主流浏览器都已经实现了TLS1.2的[...]

继续阅读 »