自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

onepunchgo的博客

兴趣使然的程序猿

  • 博客(26)
  • 收藏
  • 关注

原创 (gopher)一无所知学ebpf

我相信仍然有很多人不知道ebpf为何物,也不知道从何学起。但他似乎正在成为云原生开发性能优化的技术手段的事实标准

2022-02-05 17:54:29 1535 3

原创 从项目实战的角度看golang的pprof

golang程序优化起来是比较简单的,这得益于pprof这样的性能分析工具,有了它,程序能很容易分析像内存泄漏、cpu泄漏这样的问题。网上关于使用pprof或者分析pprof源码实现的文章也不少,但是在项目中实战的文章比较少。大多数关于pprof的文章讲的是,这样://引入pprofimport _ "net/http/pprof"...... //起一个http服务器,接着请求/debug/pprof等接口 http.ListenAndServe("0.0.0.0:6060", nil

2020-07-18 13:44:29 642

原创 用golang写一个简单的游戏(四)

上回分析到了炸弹的数量与位置问题,得出了随机位置的最多炸弹数量,但炸弹数量看起来并不多,这使得路径十分随意,因此,炸弹数量我不想太少,直接自己手动定义了。其实还有个思路的,就是按照区域随机分配炸弹,比如每个5×5区域就随机分配一个炸弹,实现方式还有其他形式,不在这个问题上纠结了。我今天想实现一个功能,自动打印出从起点到终点的最短路径,以便在炸弹数量足够多的时候,很快得出一个答案。一个m×n的地图,我们很容易知道最短路径是m+n-1。不过炸弹的设定,让这个最短路径发生了变化,炸弹的周围不能经过,所以可能出现

2020-05-31 13:08:11 341

原创 用golang写一个简单的游戏(三)

上篇文章中,留下了一些问题。尽管我已经添加了一个设定“炸弹”,在炸弹周围的位置是不能经过的,但是炸弹的数量还是太少,所以有些单调。我想要让游戏变得丰富些,就要增加炸弹的数量。这里就有个问题,炸弹的位置是随机的话,那就可能出现炸弹堵住了去路,造成死局,上篇文章中提到的m×n的画布上最多能有多少个炸弹这个问题不是很有意义,比如下图:这种排列是最多个炸弹的情况,但它没啥用处。我们的问题应该是最少有多少个炸弹就能造成死局。最少是2颗炸弹就可以造成死局,但这种特殊情况,我们已经做了处理–不能在起点和终点的周围有炸

2020-05-24 10:11:04 627

原创 用golang写一个简单的游戏(二)

上篇文章写到了,我已经打印出了一个从起点到终点的路径,并且这是受键盘事件控制的。今天我会继续给这个游戏添加一些东西,让它看起来像个“游戏”。现在我要加上一个障碍,不是随便一条路径都可以从起点到终点,这个障碍就姑且叫它“炸弹”,我赋给它的规则是,它的上下左右(称之为陷阱)及它本身不能经过,必须绕着走。即如图:添加这个道具,我有几个改动的地方,如下:获取每个关卡的参数,增加了炸弹的位置和周围陷阱的位置,结构体变成了这样子:type RoundParams struct { Height

2020-05-16 10:59:13 363

原创 用golang写一个简单的游戏

事情是这样子的,前阵子我想重新把算法学习一下,在看到动态规划的时候,莫名想到这些算法题目就跟游戏一样,每个游戏都有规则,要过关,就要在游戏规则下达到特定的目标。所以,我萌生了把算法题做成一个游戏的想法,不管什么算法都行,规则我可以自己定义。那么,做个游戏,它总要有界面,自然我不会写gui,暂时也没有想用golang的gui库的想法。所以我的第一步是用终端先实现一个,在界面上能够显示出东西。这个要求对于golang来说一点都不高。再来,是游戏规则的设定,这个游戏,我会分几个版本去完成它,多以第一个版本,我

2020-05-12 00:15:40 1894

原创 用golang实现一个简单的监控工具

背景是这样的,有一次我的服务器突然挂掉了,是由于cpu占用过高,但是我又不知道是哪个进程造成的。于是便想找一个监控工具来监控我的机器,我希望这个工具足够简单,没有复杂的配置,开箱即用,能够监控到当cpu负载过高时,发生的时间以及当时是什么进程造成这样的问题。很可惜,我并没有找到这样的工具(若有这样方便的工具请告知我),但我实在不想因此而给服务器上一套很重的监控系统。于是乎,我决定自己写一个工具。思...

2020-04-21 19:49:30 2177 1

原创 入门k8s的学习建议

最近在学习k8s,感慨k8s架构的复杂以及知识涵盖范围之广,若是有人翻到我这篇文章,希望我的入门建议对你们有用。尽管我现在的水平不高,但我认为正因为我也是初学者的身份,所以我的建议会比较实用。下面谈谈我的几点建议:系统地学习k8sk8s实在是很强大,强大到让人望而却步。k8s是什么东西?用一句话概括就是容器编排工具。既然是容器,那就绕不开docker,docker的知识要掌握。容器和容器之间要...

2020-04-11 16:32:47 1199

原创 学习golang的条件编译

昨天学习了go generate,今天学习另外一个知识点,一样是跟注释有关的知识点。golang的条件编译,也叫编译约束(build constraints)。应用场景条件编译可以在适应不同平台操作系统的代码上体现。不同的操作系统平台,对某些特性的支持不太一样,但是往往在业务层面上的代码不会去关注,所以需要对底层的代码进行一些封装。比如,Windows和Linux的home目录是不一样的,而我...

2020-03-29 12:36:06 562

原创 详解go generate

我时不时得会在别人的代码中看到"go generate",也大致知道这有什么作用,但是平时写写业务代码,并没有过多关注这方面的知识。今天得闲,稍微研究下。go generate的用途go generate常用来自动生成代码,属于golang tools的官方工具之一,从go1.4开始支持,为开发者提供了便利。可以看看Rob写的博客了解它的入门:https://blog.golang.org/g...

2020-03-28 16:38:32 1223

原创 聊聊golang的context

golang的context的主要用途在于在多个goroutine之间传递数据,管理多个goroutine的生命周期。实际的应用场景有比如,在http服务中,每个请求就对应一个goroutine,而请求之中可能又会调用别的api,而产生更多的goroutine,用context来管理这些goroutine就能比较方便在这些goroutine中传递数据和管理。主要方法func Backgroun...

2020-03-21 11:46:56 256

原创 使用golang反向代理统计api访问次数

前言今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无入侵,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。思路首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由...

2020-03-15 10:38:18 1111

原创 关于go get的小知识

1. go get与go install可能有同学在刚使用go get的时候会有一个小疑问,就是有些包go get下来的时候,有些包会“下载”一个二进制包在GOPATH/bin目录下,有些又没有。其实这是因为go get这个命令会分两步走,一个是下载源码包,一个是执行go install。所以有些包里面有main包的时候,下载完源码包就可以被go install编译放在GOPATH/bin目录下...

2020-02-23 17:05:33 704 1

原创 【代码篇】从零开始一步步搭建自己的golang框架(七)

这个框架的目标是作为一个通用的框架,我希望它大而全,在日后可以直接作为我其他项目的基础模板,所以我还想继续给他添加一些功能,就当写一些demo进去吧。这篇文章,我将会添加一个队列的功能。nsq队列有很多种,我选择nsq。使用nsq需要知道以下几个概念:nsqd:负责维护队列的组件,接受消息排队和投递;nsqlookupd:管理nsq集群的组件;nsqadmin:nsq的web管理组件;...

2020-02-16 11:13:54 279

原创 【代码篇】从零开始一步步搭建自己的golang框架(六)

基本上这个基础框架拿到手之后就可以做一些自己想要做的改动了,比如你想添加个队列的插件,你可以在相应的目录里面进行修改了,但我想让它更通用一些,本篇文章将会启动一个websocket服务,并且把配置文件改成yaml格式。修改配置之所以想要把配置从json改为yaml,有以下几点原因:json主要是用于信息传输,而yaml更适合作为配置文件的格式来使用,两者的用途不一样;yaml格式看起来比...

2020-02-15 11:00:12 252

原创 【代码篇】从零开始一步步搭建自己的golang框架(五)

上篇文章讲到数据库和redis连接的初始化已经完成,接下这篇文章会比较重要一点,我们要启动一个http服务和一个rpc服务,同时抽象出一层数据处理层来封装接口。开启http服务老规矩,先添加配置,顺便把rpc的配置也写进去,config.json: "http_config": { "addr": ":8080" }, "rpc_config": { "addr":...

2020-01-22 11:38:45 457

原创 【代码篇】从零开始一步步搭建自己的golang框架(四)

上篇文章讲到配置和日志已经初始化了,这篇文章接着把数据库和redis初始化完成。初始化数据库数据库orm我选用xorm。首先在config.json和config.go添加对应的数据库配置。config.json: "db_config": { "db_host": "127.0.0.1", "db_port": "3306", "db_user": "root"...

2020-01-21 10:40:32 385

原创 【代码篇】从零开始一步步搭建自己的golang框架(三)

上一篇文章里,我们定了项目基本目录结构。现在来回顾一下我的思路:创建入口文件;指定配置、日志目录;指定数据库、队列、缓存组件目录;创建数据处理的controller目录;指定公共函数等杂项。接下来,我们还是按照这个顺序填充代码。入口文件func main() { config.InitConfig() logger.InitLogger()}暂且忽略...

2020-01-20 11:00:16 455

原创 【代码篇】从零开始一步步搭建自己的golang框架(二)

上一篇我写到了项目初始化完成,今天接着写。目标是完成项目基本的代码目录架构。第一步首先,创建main.go文件,作为我们的程序的入口文件。第二步顺着思路走,我们先不写具体的代码,有了入口文件之后,我们下一步应该怎么做?读取配置?不,应该是写日志了。所以我们创建一个logger目录,用来存放日志组件。第三步现在是时候,读取我们项目的配置了,我们创建一个config目录来存放配置有关的东西...

2020-01-19 10:02:01 528

原创 【代码篇】从零开始一步步搭建自己的golang框架

前言import cycle not allowed不知道是不是有很多学习golang的新人会遇到这样的问题。包循环引用这个问题,让人很头疼,尤其是在项目越来越复杂的时候,出现这么一句报错,这意味着你可能需要修改很多代码,这对一个新人来讲压力很大。通常来讲,解决这个错误的办法是将需要引用的那个包抽象成接口,解耦后调用。但这不是我这个篇章想要讲的内容。这个系列主要讲的是如何从代码组织架构方面去...

2020-01-18 11:55:15 912 2

原创 【环境篇】golang环境变量二三事(三)

GCCGOThe gccgo command to run for ‘go build -compiler=gccgo’.表示"go build -compiler=gccgo",编译时指定的-compiler参数。ARThe command to use to manipulate library archives whenbuilding with the gccgo comp...

2020-01-18 00:18:07 627

原创 【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。GOEXEThe executable file name suffix (".exe" on Windows, “” on other systems).编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。GOFLAGS这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的:A space-separ...

2020-01-16 23:32:18 289

原创 【环境篇】golang环境变量二三事(一)

golang的环境变量有不少,平时安装完go之后,我们关注的一般只是GOPATH、GOROOT这些,还有与go mod有关的几个环境变量,对于其他变量了解不多,想要深入了解这门语言,有必要了解其他环境变量。我们先总的来了解下有哪些环境变量,以及它们代表的含义:$ go help environmentThe go command and the tools it invokes consul...

2020-01-16 00:01:56 693

原创 【环境篇】go mod--让人又爱又恨的包管理工具

为什么我们需要包管理Python有pip,Nodejs有npm。是不是别的语言有包管理工具,所以go就要有?当然不是,来看看下面这段代码:import ( "github.com/TomatoMr/something")这是go引用包的方式,很明显这是个第三方包,那么它在我们本机上具体是怎么被找到的呢?先说说还没有go mod的时候,它是这么找的:项目根目录下有vendor,那...

2020-01-14 23:20:20 1047

原创 【环境篇】搭建golang开发环境

学习一门语言,很多人都会是从搭建环境开始。有的语言的环境比较复杂,而有的语言环境很简单。对于go而言,说简单,的确不难,但有些概念需要先对其有所理解,才知道为什么这么用。网上对于怎么搭建一个golang开发环境已有了很多的教程,在这里我会简单介绍,不做过多描述。本篇文章仅对一些概念进行介绍,以及分享对一些我本人搭建开发环境的心得与技巧,如有错误,欢迎指正和交流。搭建golang环境1.到go...

2020-01-13 22:45:06 1831 1

原创 重新开始学习golang

初衷使用go作为我的主要编程语言,已经有些时日了。依然觉得自己离大神之路有些距离,所以决定用写博客的方式来重新记录一下自己的学习之路,温故而知新,希望自己能对go和编程的认知更加深刻,同时也希望对看到这些文章的人有所帮助,若有路过的大神能对我的所言不吝赐教,那就再好不过了。怎样才算掌握了一门编程语言我认为这个问题要分阶段来看。初级工程师:能够独立搭建这门语言的所需环境,掌握这门语言的基本语...

2020-01-12 14:54:42 159

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除