
go语言
文章平均质量分 89
阿狸的家
我是阿狸,INTJ,一个专注自我提升的笔记博主
展开
-
ETCD实现及原理分析
etcd的优点:高可用性:保存各个服务的部署,运行信息,若他出现故障可导致集群无法变更,业务瘫痪数据一致性:集群之间没有单点故障,多节点之间保障数据一致性低容量:通过内存树仅存储key版本数据,value数据存储在内存增删改查功能:还可以监听数据变化运维的可维护性:提供API变更节点,降低运维成本从高可用、数据一致性、增删改查功能角度,zookeeper也是满足需求的,但是zookeeper不支持通过API变更,运维成本比较高,其次zookeeper是java编写,部署繁琐,zookeer使原创 2021-04-29 21:44:08 · 3799 阅读 · 1 评论 -
Python基础 VS Golang基础
1、语言类型PythonGolangPython 是一种解释型语言(开发过程中不需要编译)Golang是静态类型语言(在程序运行前检查类型)Python 是交互式语言(可以在Python提示符 >>> 后直接执行代码)Golang核心思想是提高编程效率Python 是面向对象语言(代码封装在对象里)2、下载地址PythonGolanghttps://www.python.org/https://golang.org/dl原创 2021-03-07 15:00:43 · 768 阅读 · 1 评论 -
golang mysql对比db+事务tx
事务事务处理是数据的重要特性,对于一些支付系统,事务对业务逻辑会有重要影响。golang的mysql驱动也封装好了事务相关的操作,一般使用的是db对象的方法,事务则是使用另外一个对象,sql.Tx对象。使用db的Begin方法可以创建tx对象,用法和db的相关用法类似。一旦创建了tx对象,事务处理都依赖与tx对象,这个对象会从连接池中取出一个空闲的连接,接下来的sql执行都基于这个连接,直到commit或者rollback调用之后,才会把连接释放到连接池。在事务处理的时候,不能使用db的查询方法,虽然原创 2020-11-07 22:24:26 · 1203 阅读 · 0 评论 -
server和client通过grpc建立连接
一、文件结构server端和client端分布在两个不同的集群里,可以通过下发mq消息,或者grpc连接传递消息,这里介绍通过grpc建立连接,第一步是创建proto文件,要传递的方法和变量都在这里定义sendData/├── data.proto└── log二、创建data.proto文件注意,如果server端和client端不在同一集群,两边都要创建proto文件syntax = "proto3"; //指定protobuf的版本package sendDa原创 2020-10-26 09:02:53 · 2516 阅读 · 5 评论 -
Golang 将map内容写入内存
大多情况下很多数据因为格式简单,不需要存储在数据库内,故而写入内存是最好的选择,同时也减少了读取数据库的耗时package mainimport ( "fmt" "os" "encoding/json" "io/ioutil")func main() { // os.Stat判断文件是否存在,若不存在便创建 fileinfo, err := os.Stat(`C:\Users\Desktop\amber.txt`) if err != nil {原创 2020-08-30 11:42:36 · 3424 阅读 · 0 评论 -
Golang 程序crash后生成的coredump文件
RLIMIT参数RLIMIT_CORE core文件的最大尺寸,如果为0说明不能创建core文件RLIMIT_CPU CPU时间的最大值(单位:秒)GOTRACEBACK配置GOTRACEBACK=none 只输出panic异常信息GOTRACEBACK=single 只输出被认为引发panic异常的那个goroutine的相关信息GOTRACEBACK=all 输出所有goroutines的相关信息,除去与go runtime相关的stack frames.GOTRACEBACK=syste原创 2020-08-23 21:29:53 · 4654 阅读 · 1 评论 -
Golang 微框架Gin实现etcd存储
Gin简介Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,它和其他第三方 Golang 库一样用go get -u github.com/gin-gonic/gin 下载gin,然后import导入即可gin路由func init() { router := gin.Default() v1 := router.Group("/v1") { v1.POST("/login", login) v1.POST("/pu原创 2020-08-15 10:49:28 · 1352 阅读 · 1 评论 -
Go pprof性能调优
pprof文件作用从样本记录中分析出代码计算时间最长或者说最耗CPU资源的部分,可以通过以下代码启动对CPU使用情况的记录import "runtime/pprof"func startCPUProfile(cpuProfile string) { if cpuProfile != "" { f, err := os.Create(cpuProfile) if err != nil { fmt.Fprintf(os.Stderr, "C原创 2020-08-09 10:29:56 · 499 阅读 · 0 评论 -
golang Mutex锁和RWMutex锁
golang 中的 sync 包实现了两种锁:Mutex:互斥锁RWMutex:读写锁,RWMutex 基于 Mutex 实现Mutex(互斥锁)1、Mutex 为互斥锁,Lock() 加锁,Unlock() 解锁2、在一个 goroutine 获得 Mutex 后,其他 goroutine 只能等到这个 goroutine 释放该 Mutex3、使用 Lock() 加锁后,不能再继续对其加锁,直到 Unlock() 解锁后才能再加锁4、在 Lock() 之前使用 Unlock() 会导致原创 2020-08-02 14:52:25 · 1056 阅读 · 0 评论 -
golang 判断元素是否在数组内
背景众所周知,golang里没有像python的in来判断元素是否在list里存在,可替代的办法是将list放到map里,在map里判断元素是否存在// 已知list中元素"amber","jack"arr := [...]string{"amber","jack"}// 初始化mapvar set map[string]struct{}set = make(map[string]struct{})// 上面2部可替换为set := make(map[string]struct{})//原创 2020-07-12 10:21:20 · 27009 阅读 · 1 评论 -
golang 使用logrus传递ctx
logrus日志级别logrus日志一共7级别, 从高到低: panic, fatal, error, warn, info, debug, trace. logrus.SetLevel(logrus.InfoLevel) logrus.SetLevel(logrus.DebugLevel) ...logrus调用方式logrus总共提供两种方式调用:1、logrus.Info("hello logrus")2、logrus.WithField(logruns.Fields{"key":"原创 2020-07-11 23:30:16 · 1348 阅读 · 0 评论 -
golang 大端匹配IP网段
字节序:大端序、小端序大端序:低地址端存放高位字节小端序:低地址端存放低位字节大端序,网段指定首末ipimport "net"func main () { ip, cidr, _ := net.ParseCIDR("10.1.0.0/16") // 10.1.0.0 fmt.Println(ip) Prefix := cidr.IP.String() // 10.1.0.0 fmt.Println(Prefix) m, _ :=原创 2020-06-26 21:29:57 · 3992 阅读 · 1 评论 -
DDMQ
GitHub链接:https://github.com/didi/DDMQDDMQ SDK目前支持Java、go、C/C++producerproducer:生产方,每个producer只能关联一个group,初始化prodecer时需要指定config文件,config里指定ProxyList,可以手动传递也可以自动发现,还可以指定连接池的数量,不建议修改,使用默认的大小50个已能满足大部分需求,如果设置的过小会影响生产的性能发送消息给mq有4种方式1、Send(TOPIC, STRING_ME原创 2020-06-20 22:13:59 · 2085 阅读 · 4 评论 -
golang for循环种遍历defer
defer需求分析golang中几乎所有涉及对数据库的操作都要在回滚操作时用到defer,而当涉及到批量创建/删除操作的回滚时,就要在for循环内使用defer,虽不推荐使用,但这可以在遍历其中一条数据失败时即可回滚止损func saveDB() error { ips := []string{"192.168.1.1","192.168.1.2"} for _, ip := range ips { if err := db.create(ip); err != nil { errIn原创 2020-06-14 11:33:19 · 6331 阅读 · 0 评论 -
golang高并发限流 ping / telnet
需求当需要同时ping/telnet多个ip时,可以通过引入ping包/telnet包实现,也可以通过go调用cmd命令实现,不过后者调用效率较差,所以这里选择ping包和telnet包还有就是高并发的问题,可以通过shell脚本或者go实现高并发,所以我选择的用go自带的协程实现,但是如果要同时处理1000+个ip,考虑到机器的性能,需要ratelimit控制开辟的go协程数量,这里主要写一下我的建议和淌过的坑ping参考链接: https://github.com/sparrc/go-ping原创 2020-06-13 21:11:06 · 2006 阅读 · 0 评论 -
context的WithTimeout、WithDeadline、WithCancel
GOOS指的是目标操作系统GOARCH指的是目标处理器的架构goland 配置goroot:从官网下载sdkgoland 配置gopath:src的上一级,支持多个,当有多个资源时,go get默认第一个使用Err方法:返回取消的错误原因,Context被取消原因Go支持匿名函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用WithTimeout...原创 2020-05-04 21:10:59 · 2629 阅读 · 1 评论 -
echo路由及中间件
实例化echo对象//实例化echo对象。e := echo.New() //定义post请求, url路径为:/user/create, 绑定createUsers控制器函数user := e.Group("/user")user.POST("/create", createUser)//定义get请求,url路径为:/user/get/:id,绑定getUser控制器函数us...原创 2020-05-04 14:56:13 · 1661 阅读 · 0 评论 -
go定时任务crontab
在linux里可以通过crontab -e编辑定时任务go中可以通过协程来实现from xxx import crontabfunc main() { //执行任务代码 xxx go func() { CronExec() }()}package crontabimport "github.com/robfig/cron"func CronExec() {...原创 2020-05-01 20:54:00 · 3766 阅读 · 0 评论 -
golang 运行-config指定配置文件
配置文件/home/amber/db.toml:# This is a TOML document.title = "TOML Example"[database]server = "192.10.92.10"ports = [ 5000, 5001, 5002 ]connection_max = 5000enabled = true //bool类型go文件type...原创 2020-05-01 20:05:31 · 6734 阅读 · 1 评论 -
go执行cmd命令出现os:process already finished
git连接:https://github.com/natefinch/deputydeputy是go包,相当于在os系统上的一个轻量的cmd命令deputy包结构体Deputy 结构体里面包含错误类型Cancel :当调用cancel方法时,会调用os底层signal,报出os:process already finishedtype Deputy struct { // Canc...原创 2020-04-25 20:32:23 · 1369 阅读 · 0 评论 -
go语言cli命令行交互
cobra使用预先准备:go get “github.com/spf13/cobra”cobra/cmd/root.gopackage cmdimport ( "fmt" "os" "github.com/spf13/cobra" "github.com/spf13/viper" homedir "github.com/mitchellh/go-homedir")va...原创 2020-03-02 11:44:37 · 4350 阅读 · 2 评论 -
golang NewRequest / gorequest实现http请求
通过go语言实现http请求客户端:import ( "net/http" "json" "ioutil")type Student struct{ id string name string}type StudentReq struct{ id string name string}func main() { stu := Student{ id:"2ed4...原创 2020-02-24 21:16:41 · 16616 阅读 · 0 评论 -
go语言进阶
包的目录结构:src目录是专门用来存放go源码文件,每个文件夹都对应一个package同一目录下所有go文件都属于一个包import时从go安装目录GOPROOT和GOPATH开始索引import时 绝对路径:根据src的下一级目录开始import时 相对路径:main.go所在的路径,以"."开始import时使用.操作 import ( . "fmt...原创 2020-02-16 16:08:27 · 437 阅读 · 0 评论 -
go执行shell 脚本 exit status 1
import ( "os/exec" "log")func Shell() (string, err) { command := "sh /home/user/go/cmd.sh create" cmd := exec.Command("/bin/bash", "-c", command) output, err := cmd.Output() if err != nil{ l...原创 2020-02-10 20:51:28 · 14857 阅读 · 0 评论 -
WaitGroup优雅退出
WaitGroup提供3个方法实现优雅退出1、Add() :每收到http/mq请求,会在计数器+12、Done():每执行完http/mq请求,会在计数器-13、Wait():计数器=0,即没有正在处理的 请求import "sync"import "os/signal"import "fmt"func main() { var wg sync.WaitGroup sig :...原创 2020-01-23 11:23:47 · 1759 阅读 · 0 评论 -
go build 3种方式
GO111MODULE=off,go会从vendor和GOPATH寻找包GO111MODULE=on,go不会从vendor和GOPATH寻找包,直接加载go. mod加载包通过vendor 编译0:GO111MODULE=off1:go get -u -v github. com/kardianos/govendor2:govendor add +e(生成vendor文件)3:g...原创 2020-01-15 16:07:59 · 1901 阅读 · 0 评论 -
go语言学习笔记5(网络编程,Redis)
网络编程server.goimport "net"func main() { // 服务器监听8000端口 listen, err = net.Listen("tcp", 0.0.0.0:8000) defer listen.Close() // 等待客户端连接 for { conn, err = listen.Accept() // 得到客户端的ip和por...原创 2019-12-22 09:37:08 · 246 阅读 · 0 评论 -
go语言学习笔记4(文件,管道,map)
go文件处理,go协程,go管道,json,单元测试,命令行读取,管道阻塞,select关键字取管道数据原创 2019-12-04 16:04:37 · 446 阅读 · 0 评论 -
go语言学习笔记3
go结构体,go方法,封装,继承,多态,断言原创 2019-12-02 18:19:44 · 225 阅读 · 0 评论 -
go语言学习笔记2
go时间和日期2006/01/02 15:04:05这个时间是固定的package mainimport "fmt"import "time"func main(){ now := time.Now() fmt.Printf("Year=%v\n", now.Year()) fmt.Printf("Month=%v\n", now.Month()) fm...原创 2019-12-01 18:00:11 · 309 阅读 · 0 评论 -
go语言学习笔记1
吉祥物:金花鼠官网::golang.org云计算应用:CDN(内容分发网络),访问网址加载视频速度很快go语言特点:机能达到静态语言的安全和性能(c语言),也达到动态语言的开发维护效率(python)go语言包的概念:每个文件都属于一个包,main函数必须在main包go语言引入垃圾回收机制:内存自动回收,不需要开发人员关注go语言天然并发:goroutine,轻量级...原创 2019-11-23 15:12:40 · 362 阅读 · 0 评论