
go
文章平均质量分 60
普通网友
这个作者很懒,什么都没留下…
展开
-
fasthttp性能优化点
1.response buffering这个是优化对于http 1.1 的pipeline,会有多个request和response的请求。如下图原始go http server的处理伪代码如下工作模式很简单,这个链接有读事件,就读取请求,然后处理请求,然后响应给客户端,可以看到如果是pipeline方式的话,会多次调用read 和 write系统调用。所以fasthttp用了个buffer,缓冲response数据,等到请求数据没了的话,再一起发送给客户端,代码如下优...原创 2022-02-07 18:10:31 · 1437 阅读 · 0 评论 -
gin框架
简单使用import ( "net/http" "github.com/gin-gonic/gin")func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello world") }) r.POST("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") })原创 2022-02-07 00:40:10 · 765 阅读 · 0 评论 -
一种控制go协程并发的方式
package mainimport ( "fmt" "sync" "time")type Worker struct { workersLimitCh chan struct{} writeTimeout time.Duration wg sync.WaitGroup}var ( timerPool sync.Pool //defaultWorkersLimit = cgroup.AvailableCPUs())// Get return.原创 2021-07-11 20:17:36 · 190 阅读 · 0 评论 -
go性能优化文章集合
1.真实环境下大内存 Go 服务性能优化一例,pprof的实操https://mp.weixin.qq.com/s/jGGCccMOx4s5asG2IXWNMQ2.golang原生net/http包的超时坑,设置了整个连接的超时,即在http.Transport里设置了超时https://mp.weixin.qq.com/s/axPD72KEieNw1VP3HPfgKQ3.go pprof的一个使用教程https://mp.weixin.qq.com/s/w6mx89xggITalSOH原创 2021-07-10 14:08:34 · 181 阅读 · 0 评论 -
go pprof初实操体验
记一次go耗时操作的查询实战。背景:处于php to go的过程,有些接口迁移到go服务里面去了。目前我们的流量转发是在应用层做的转发,这样其实是不好的。回归正传,最近上了个接口,功能很简单,取一组id,过滤,组成count个再返回,count是前端传来的,可以理解为一页的个数。但是有个特别的对方,就是过滤这个条件,会导致数据需要多次循环去凑够这个count,开发中就意料到这种很危险了,没想到果然在意料中,上了线后还是出现问题了。现象:在app上调用这个接口时,发现数据没有更新。抓包请求发现原创 2021-07-09 00:17:30 · 349 阅读 · 2 评论 -
go好文收藏
1. go并发工作池原理https://itnext.io/explain-to-me-go-concurrency-worker-pool-pattern-like-im-five-e5f1be71e2b0原创 2021-07-02 11:31:32 · 91 阅读 · 0 评论 -
go基准测试bench
一、使用 testing 包构建基准测试我们在main.go里面实现了一个Fib3函数func Fib3(n int) int { switch n { case 0: return 0 case 1: return 1 case 2: return 1 default: return Fib3(n-1) + Fib3(n-2) }}然后再同级目录新建一个main_test.go文件,然后写测试packa...转载 2021-06-15 23:58:36 · 1491 阅读 · 0 评论 -
go:程序怎样recover
这是A Journey With Go翻译的第二篇文章,大家感兴趣可以去看看原文。我是带着学习的目的去翻译,既能学习英文,又能学习技术,一举二得。所以翻译的不好是正常的,有疑问可以交流。正文在go中如果没有恰当的处理error,会造成panic,比如非法的内存操作。如果这个错误是预料之外的,也没有其它的处理方法,也可以由开发者主动panic。了解recover或终止是如何处理的,有助于理解一个会发生panic的程序带来的后果多层函数调用关于panic和recover的经典的例子有..翻译 2020-11-18 14:52:00 · 1289 阅读 · 0 评论 -
go:gsignal信号的掌控者
文章基于go 1.13信号package提供了信号处理订阅这是一段监听中断, 调整终端等信号的代码每个os.Signal管道监听自己的事件集合,有一个如下的示意图解释上面代码的执行流程也能停止监听信号或者忽视信号,下面是一段示例代码这个进程不能被ctrl+c停止,因为忽视了中断信号。多次调整terminal也不会停止,因为我们停止监听了对应的信号。下面让我们来看一看listener和process阶段是怎么样处理这些应付即将到来的信号的。gsignal在初始化翻译 2020-11-16 23:28:36 · 291 阅读 · 0 评论 -
在ubuntu机器上安装新版的go
背景使用pprof工具时,需要进到内网,登上某个服务器上去,然后执行。但是这些命令需要安装go,使用apt-get安装的只有 1.6的,存在版本比较旧,可能功能也不全的问题 ,所以需要安装下较新版本的go。为了简单我们不用源码编译来安装,使用下面这个版本的。安装过程1.下载go1.14.12.linux-amd64.tar.gzhttps://studygolang.com/dl2.解压到 /usr/bin目录tar -C /usr/bin-xzf go1.14.12.lin..原创 2020-11-16 15:01:45 · 376 阅读 · 0 评论 -
go性能分析工具pprof
背景自己写的代码在运行时,如何进行性能分析呢?go提供了一个叫pprof的工具,可以帮助我们分析pprof介绍Go语言内置了获取程序运行数据的工具,包括以下两个标准库:runtime/pprof: 采集工具型应用运行数据进行分析 net/http/pprof: 采集服务型应用运行时数据进行分析pprof开启后,每隔一段时间(10ms)就会收集当前的堆栈信息,获取各个函数占用的CPU以及内存资源,然后通过对这些采样数据进行分析,形成一个性能分析报告。性能优化主要有一下几个方面:...原创 2020-11-15 23:38:47 · 7491 阅读 · 0 评论 -
golang里一道关于 json 和 slice 的题
package mainimport ( "encoding/json" "fmt")type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"`}func main() { jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` a := AutoGener.转载 2020-10-21 23:31:29 · 434 阅读 · 0 评论 -
go升级到1.14 go get 私有仓库提示 connect refused 或者timeout
https://segmentfault.com/a/1190000021127791?utm_source=tag-newest转载 2020-10-18 21:27:18 · 2983 阅读 · 0 评论 -
在go里像crontab一样,实现你的定时任务
下载go get -u -vgithub.com/robfig/cron说明1.crontab命令见https://www.runoob.com/linux/linux-comm-crontab.html2.一个比较好用的crontab执行时间计算可以用来测试你的命令https://tool.lu/crontab/使用// 开始定时任务,这个会开启协程,后台挂起,所以...原创 2020-04-25 23:17:24 · 305 阅读 · 0 评论 -
go使用rocketmq
下载go get -u -v github.com/apache/rocketmq-client-go/v2初始化type MqConf struct { NameServers []string `mapstructure:"nameServers"`}var ( MqProducer rocketmq.Producer MqPushConsum...原创 2020-04-25 23:00:49 · 15608 阅读 · 16 评论 -
go如何进行指针运算
package mainimport ( "fmt" "unsafe")type S1 struct { A int32 B int64}func main() { s := S1{} fmt.Println(s) b := (*int64)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + unsafe.Offset...转载 2020-04-01 19:08:50 · 2333 阅读 · 0 评论 -
go-优雅的传递参数
//type Foo1 struct {// num int// str string//}////func New(num int, str string) *Foo1 {//// return &Foo1{// num: num,// str: str,// }//}//这种传参方法弊端很明显,假设我们需要对Foo内部增加两个属性,同时构造函数也需要支持...转载 2019-12-06 11:16:43 · 879 阅读 · 0 评论 -
go cmd
cmd := exec.Command("") //这几天再使用cmd的时候,发现内存占有过高,就top了一下,无意发现了很多僵尸进程 //所谓的僵尸进程就是父进程一直在运行,子进程结束后,没有被回收 //代码里 cmd.Start() cmd.Run() // 这两个都有在用,以为这是阻塞和不阻塞的问题, 当我用到了start的时候,就暴露出了这个问题,太多的僵尸进程了 ...原创 2019-12-06 11:15:34 · 938 阅读 · 0 评论 -
go——select
在go的语言规范中,select中的case的执行顺序是随机的,当有多个case都可以运行时,select会随机公平地选出一个执行,其它的便不会执行package mainimport "fmt"func main() { ch := make (chan int, 1) ch<-1 select { case <-ch: ...转载 2019-11-22 00:25:10 · 354 阅读 · 0 评论 -
使用go来实现一个简单的负载均衡
How does our simple load balancer work负载均衡有不同的负载策略Round Robin:轮询,就是每个请求依次打到每个服务商去Weighted Round Robin:加权轮询,额外加了权重Least Connections:最少连接,优先请求到连接数最少的服务器上去补充的其它策略参考https://blog.youkuaiyun.com/qq_2...转载 2019-11-12 00:17:51 · 1644 阅读 · 0 评论 -
什么是伪共享(false sharing)
今天看go的sync.pool的代码,发现了一个比较陌生的名词 false sharing , 之前没听说过,就去查了下,瞬间学到了type poolLocal struct { poolLocalInternal // Prevents false sharing on widespread platforms with // 128 mod (cache line s...原创 2019-10-30 19:54:06 · 10861 阅读 · 9 评论 -
go 生成随机数、获取当前微秒数、获取星期几
1、生成随机数go生成随机数的方法和C中的差不多,都是先设置种子,一般以当前时间为准,然后设定范围,代码如下func GenerateRangeNum(min int, max int) int { if min == max { return min } rand.Seed(time.Now().Unix()) randNum := rand.Intn(max-min) +...原创 2018-09-20 09:44:16 · 5865 阅读 · 1 评论 -
go test常用介绍
package mainimport ( "testing" "fmt")func testPrint(t *testing.T) { ret := PrintMain() if ret == 0 { t.Errorf("error") } fmt.Println(ret)}func testPrint2(t *testing.T) { ret := Print...原创 2018-12-22 23:16:23 · 4249 阅读 · 1 评论 -
冒泡排序和优化 go实现
package mainimport "fmt"var arr = []int{1, 3, 4, 2, 6, 7, 8, 0, 10, 1231, 4194, 491, 10, 194, 48, 2, 34}func BubbleSort() { arrLen := len(arr) for i := 0; i < arrLen-1; i ++ { fo...原创 2019-03-28 01:02:05 · 207 阅读 · 0 评论 -
go的接口和context的使用
先看下sort.Sort(data Interface),参数中Interface定义如下type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i...原创 2019-04-22 21:06:45 · 639 阅读 · 0 评论 -
go的map[string]interface{}
func main() { json_str := `[{"id":3345195,"type":1,"txt":" "},{"id":3345234,"type":1,"txt":"sassa","file_ty":6,"music_vol":0,"bmt":0,"emt&q原创 2018-09-16 19:58:23 · 13399 阅读 · 0 评论