Golang梦工厂
文章平均质量分 95
Sunshine-松
努力奋斗的小码农
展开
-
Go语言如何实现可重入锁?
前言哈喽,大家好,我是asong。前几天一个读者问我如何使用Go语言实现可重入锁,突然想到Go语言中好像没有这个概念,平常在业务开发中也没有要用到可重入锁的概念,一时懵住了。之前在写jav...原创 2021-05-31 08:10:00 · 1140 阅读 · 0 评论 -
理解go interface看这一篇(实践检验真理)
前言我想,对于各位使用面向对象编程的程序员来说,"接口"这个名词一定不陌生,比如java中的接口以及c++中的虚基类都是接口的实现。但是golang中的接口概念确与其他语言不同,有它自己的特点,下面我们就来一起解密。定义Go 语言中的接口是一组方法的签名,它是 Go 语言的重要组成部分。简单的说,interface是一组method签名的组合,我们通过interface来定义对象的一组行为。interface 是一种类型,定义如下:type Person interface { Eat(原创 2020-12-20 20:28:01 · 719 阅读 · 0 评论 -
十张动图带你搞懂排序算法(go实现版本)
排序算法简介:排序算法在我们日常开发中、面试中都会使用到,所以就打算弄一个合集,把常用的排序算法用Go实现一下。如果你还不会这些那就说不过去了哦~~~。代码已经收录到我的github,需要的自取:https://github.com/asong2020/go-algorithm/tree/master/sort算法分类我们常见的排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比原创 2020-11-29 21:43:37 · 690 阅读 · 0 评论 -
Go语言相关书籍推荐(从入门到放弃)
前言最近总有读者问我可不可以推荐一下go语言入门必读书籍。所以今天就推荐几本。因为笔者也没读过几本,所以就咨询了几位前辈,现在我就把这一份书单介绍给你们,从入门到进阶。Go语言简介Go语言是最近几年流行起来的语言,该语言由谷歌发明,现在得到广泛应用。Go语言的最大特点就是语法简单且并发支持度好,开发效率很高。平常我们在C/C++语言中需要几十行的代码量,在Go语言中可能就只需要几行代码就可以搞定。现在也越来越多的人开始转学Go。Go语言优势脚本化的语法;开发效率高,容易上手静态类型+编原创 2020-11-21 18:10:33 · 4502 阅读 · 0 评论 -
(Mysql)对数据库设计时设计标识字段引发的一些思考
前言哈喽,everybody,我是asong。今天asong教你们一个mysql优化设计状态标识。学会了他,我们的DB结构看起来更清晰,也避免了DB结构过大的问题,具体怎么设计,下面你就看我怎么操作就好了~~~背景我们在很多应用场景中,通常是需要给数据加上一些标识,已表明这条数据的某个特性。比如标识用户的支付渠道,标识商家的结算方式、商品的类型等等。对于这样的具有有限固定的几个值的标识,我们通过枚举的方式来标识就可以了,但是对于一些同时具有多个属性且变化比较大的就显然不合适了,举个很简单的例子,我原创 2020-11-15 22:07:19 · 575 阅读 · 0 评论 -
go语言参数传递到底是传值还是传引用
前言哈喽,大家好,我是asong。今天女朋友问我,小松子,你知道Go语言参数传递是传值还是传引用吗?哎呀哈,我竟然被瞧不起了,我立马一顿操作,给他讲的明明白白的,小丫头片子,还是太嫩,大家且听我细细道来~~~。实参与形参数我们使用go定义方法时是可以定义参数的。比如如下方法:func printNumber(args ...int)这里的args就是参数。参数在程序语言中分为形式参数和实际参数。形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。实际原创 2020-11-08 17:17:36 · 3367 阅读 · 5 评论 -
消息队列和任务队列有什么区别?
前言昨天发了一篇文章是关于machinery的入门教程,有一位读者在留言中问我 这个和kafka有什么区别?一时我也有点懵,这两个的概念很近,到底有什么不同呢?根据我自己的理解,简单分析了一下,有不足之处欢迎指出。消息队列消息队列这个概念其实在我之前的文章:手把手教姐姐写消息队列,自己动手用go写一个简易版的消息队列,有兴趣的小伙伴们可以看一下这篇文章。回归正题,我们再来介绍一下什么是消息队列。消息队列,一般我们会简称它为MQ(Message Queue)。他是由两个单词组成,我们应该对队列(Q原创 2020-11-03 22:46:19 · 4067 阅读 · 1 评论 -
go-machinery入门教程(异步任务队列教程)
主题使用方法:https://github.com/xitu/juejin-markdown-themestheme: juejinhighlight: github前言哈喽,大家好,我是asong,这次给大家介绍一个go的异步任务框架machinery。使用过python的同学们都知道Celery框架,machinery框架就类似于Celery框架。下面我们就来学习一下machinery的基本使用。自己翻译一个粗略版的machinery中文文档,有需要的伙伴们公众号自取无水印版:后台回复:m.原创 2020-10-31 19:38:32 · 4803 阅读 · 1 评论 -
缓存更新的几个套路
前言Hello,everybody,我是asong,上一篇文章我们一起聊一聊了面试中几个常见的缓存问题,今天我依然聊一聊缓存,不过今天我们聊的不是面试了,我们一起来看一看我们在系统中缓存更新的设计,因自己经验有限,所以这些缓存设计来源于网上,我只是在这里总结一下,有什么不对的欢迎指出~~~????。缓存预热 To solve 缓存冷启动在上一篇文章中[常见面试题之缓存雪崩、缓存穿透、缓存击穿],忘记讲了一个概念——缓存预热,所以在这篇文章补充一下,开一个好头,预热嘛~~~。什么是缓存预热呢?我们原创 2020-10-17 18:30:42 · 316 阅读 · 2 评论 -
常见面试题之缓存雪崩、缓存击穿、缓存穿透(redis)
前言Hello,everybody,我是asong,今天与大家一起来聊一聊面试中几个常见的缓存问题。为什么会突然想做一篇这个文章呢,今天翻了一下我当初准备面试时整理的一些资料,发现缓存在面试中占比还是很高的,当初为了面试也是背了好久的,不过因为都是背的,现在也有点忘了,今天就想着好好整理一下这一部分,好好记录一下。因为自己能力有限,这一篇主讲通俗易懂,不涉及太难的缓存使用场景。好啦,我们开始吧。缓存应用缓存在我们平常的项目中多多少少都会使用到,缓存使用的使用场景还是比较多的,缓存是分布式系统中的重原创 2020-10-11 20:52:26 · 883 阅读 · 1 评论 -
git-rebase看这一篇就可以了
前言哈喽,everybody,不知不觉8天的小长假也接近了尾声,玩耍了这么多天,今天也要收一收心,开始学习了呦~。明天就要上班啦,今天姐姐突然问我git-rebase指令是干什么的,怎么用?其实我是不想给他讲的,但是还是没有逃过姐姐的软磨硬泡,那么我们就一起来看一看什么是git-rebase吧!!!缘起话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,原创 2020-10-08 19:41:50 · 6563 阅读 · 4 评论 -
go解锁设计模式之单例模式(有个小坑要注意)
前言哈喽,大家好,我是asong,这是我的第16篇原创文章,感谢各位的关注。今天给大家分享设计模式之单例模式,并使用go语言实现。熟悉java的同学对单例模式一定不陌生,单例模式,是一种很常见的软件设计模式,在他的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。下面我们就一起来看一看怎么使用go实现单例模式,这里有一个小坑,一定要注意一下,结尾告诉你哦~~~什么是单例模式单例模式确保某一个类只有一个实原创 2020-09-20 21:33:25 · 243 阅读 · 0 评论 -
慎用time.After会造成内存泄漏(go)
前言嗨,大家好,我是asong,我今天又来了。昨天发表了一篇文章:手把手教姐姐写消息队列,其中一段代码被细心的读者发现了有内存泄漏的危险,确实是这样,自己没有注意到这方面,追求完美的我,马上进行了排查并更改了这个bug。现在我就把这个bug分享一下,避免小伙伴们后续踩坑。测试代码已经放到了github:https://github.com/asong2020/Golang_Dream/tree/master/code_demo/time_oom_validate欢迎star~~~背景我先贴原创 2020-09-20 21:12:14 · 2122 阅读 · 1 评论 -
手把手教姐姐写消息队列(golang)- 使用channel实现消息队列
前言这周姐姐入职了新公司,老板想探探他的底,看了一眼他的简历,呦呵,精通kafka,这小姑娘有两下子,既然这样,那你写一个消息队列吧。因为要用go语言写,这可给姐姐愁坏了。赶紧来求助我,我这么坚贞不屈一人,在姐姐的软磨硬泡下还是答应他了,所以接下来我就手把手教姐姐怎么写一个消息队列。下面我们就来看一看我是怎么写的吧~~~。本代码已上传到我的github:有需要的小伙伴,可自行下载,顺便给个小星星吧~~~什么是消息队列姐姐真是把我愁坏了,自己写的精通kafka,竟然不知道什么是消息队列,于是原创 2020-09-19 21:48:09 · 5509 阅读 · 2 评论 -
最详细的雪花算法讲解,包教包会(go版本)
原文链接前言嗨,everybody,我是asong,这是我的第十二篇文章,今天给大家介绍一下雪花算法。介绍雪花算法是次要的,因为大家都太熟悉了,主要目的是推荐一下我的新系列。今天,我突发奇想,想创建一个新系列。这个系列主要是存储我们日常工作开发中使用的算法,比如雪花算法、哈希算法等等。网络上关于这些算法的知识还是很多的,但是很杂,想找一个算法很不容易,还要看各种各样的博客,五花八门的。所以我们现在的想法就是想将这些算法整理到一起,全部采用go实现,并附带基础知识学习,代码说明这样的详细文档,这样我们想原创 2020-09-17 22:16:21 · 2873 阅读 · 1 评论 -
已删除
前言最近在项目开发时,经常使用到Context这个包。context.Context是Go语言中独特的设计,在其他编程语言中我们很少见到类似的概念。所以这一期我们就来好好讲一讲Context的基本概念与实际使用,麻麻再也不担心我的并发编程啦~~~。什么是context在理解context包之前,我们应该熟悉两个概念,因为这能加深你对context的理解。1. GoroutineGoroutine是一个轻量级的执行线程,多个Goroutine比一个线程轻量所以管理他们消耗的资源相对更少。Goro原创 2020-09-13 17:32:41 · 1208 阅读 · 0 评论 -
go-elasticSearch实战篇,带你学会elasticSearch的增删改查
前言哈喽,everybody,这是go-elastic学习系列教程第二篇文章。上一篇我们学习了ElasticSearch基础,如果还不懂基础的,可以先看一看上一篇文章,传送门。这一篇我们开始实战,写了一个小demo,带你们轻松入门ElasticSearch实战开发,再也不用担心es部分的需求开发了。代码已上传github,可自行下载学习。如果能给一个小星星就好啦。好啦,废话不多说,直接开始吧。github地址:https://github.com/asong2020/Golang_Dream/tree原创 2020-09-12 23:16:47 · 1193 阅读 · 2 评论 -
[Golang]这几个for-range的坑,你们一定要知道,铁汁
前言读者A:不会吧,阿Sir,这周这么高产~~~asong:当然啦,为了你们,一切都值得~~~读者B:净放臭屁屁,就你戏多~~~asong:你凶人家,坏坏~~~哈哈哈,戏太足了奥。自导自演可还行。今日分享之前,先放松放松嘛,毕竟接下来的知识,还是需要我们思考的。今天给大家分享的是go中的range,这个我们在实际开发中,是经常使用,但是他有一个坑,使用不好,是要被开除的。但是,今天你恰好看了我这一篇文章,就避免了这个坑,开心嘛~~~。直接笑,别克制,我知道你嘴角已经上扬了。废话结束,我们直接开始原创 2020-09-05 19:33:18 · 3885 阅读 · 1 评论 -
还不会wire、cron嘛,这个小项目包你学会
前言嗨,我小asong又回来了。托了两周没有更新,最近比较忙,再加上自己懒,所以嘛,嗯嗯,你们懂的。不过我今天的带来的分享,绝对干货,在实际项目中开发也是需要用到的,所以为了能够讲明白,我特意写了一个样例,仅供参考。本文会围绕样例进行展开学习,已上传github,可自行下载。好了,不说废话了,知道你们迫不及待了,我们直接开始吧!!!wire依赖注入在介绍wire之前,我们先来了解一下什么是依赖注入。使用过Spring的同学对这个应该不会陌生。其中控制反转(IOC)最常见的方式就叫做依赖注入。将依赖的原创 2020-09-05 16:19:48 · 351 阅读 · 0 评论 -
使用go进行日志分析并生成excel,再也不担心做日志分析了
前言哈喽,大家好,我是asong。这是我的第十一篇原创文章。这周工作的时候接到了一个需求,需要对一个日志文件进行分析,分析请求次数以及耗费的时间平均时间等信息,整理成excel表格,方便分析做优化。刚拿到这个需求的时候,着实有点懵逼。那么多日志,我该怎么分析呢?该使用什么工具去分析呢。最后还要生成excel表格。哇,给我愁坏了。所以我开始并没有直接去做需求,而是去查资料、问同事、朋友,怎么做日志分析。确实搜到了一些日志分析的方法:awk、python。无疑是用脚本来做。但是我对这些不太熟悉呀,而且只有一下原创 2020-08-23 16:54:04 · 620 阅读 · 0 评论 -
学会gin参数校验之validator库,看这一篇就足够了
前言哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识相关校验规则原创 2020-08-22 19:20:01 · 18186 阅读 · 7 评论 -
基于GIN框架的六种热加载(golang热加载/热部署),你都知道吗
前言哈喽,大家好,我是asong,这是我的第九篇原创文章。今天给大介绍几种热加载的方法,大大提高我们的开发效率。本篇文章的所有实现都是基于GIN框架的,公众号有2020最新官方中文文档,后台回复:GIN(不区分大小写)即可获取。本文的所有项目效果演示都是基于gin_jwt_swagger开源项目,项目地址:https://github.com/asong2020/Golang_Dream/tree/master/Gin/gin_jwt_swagger。欢迎Star与使用。文章链接:听说你还不会jwt和原创 2020-08-15 17:22:11 · 7328 阅读 · 1 评论 -
[Golang梦工厂]一个小项目带你学会GIN框架、JWT鉴权、swagger生成接口文档,看这一篇就够了
前言哈喽,大家好,我是asong,这是我的第八篇原创文章。听说你们还不会jwt、swagger,所以我带来一个入门级别的小项目。实现用户登陆、修改密码的操作。使用GIN(后台回复Golang梦工厂:gin,可获取2020GIN中文文档)作为web框架,使用jwt进行身份校验,使用swagger生成接口文档。代码已上传个人github:https://github.com/asong2020/Golang_Dream/tree/master/Gin/gin_jwt_swagger。有需要的自行下载,配有详细原创 2020-08-09 22:26:03 · 1686 阅读 · 0 评论 -
打造舒适mac终端体验(iterm2)知道的小伙伴已经开始行动了
1. 前言hello,我是asong,今天不做知识分享,给大家推荐一款mac终端利器iterm2。我们平常在做项目开发时,离不开使用终端,mac本身带的终端界面并不是特别的好看(手动狗头),所以今天给大推荐这一款终端利器,不仅功能强大,而且看起来还顺眼,不说废话,直接展示。怎么样,看起来还不错吧!!! 下面就来教你们怎么安装。2. iterm2安装在mac下安装一些软件或者插件,我都喜欢使用brew命令进行安装,是真的方便。如果电脑没有安装brew,首先执行一下命令安装brew,在进行后续的操作原创 2020-08-01 14:57:26 · 457 阅读 · 0 评论 -
grpc实践-学会grpc就是这么简单
前言hello,我是asong,这是我的第七篇原创文章。上一篇我们使用go的标准库rpc进行实践,使用起来还是很方便的,这一篇我们来学习一grpc。1. gRPCgRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。他的目标是跨语言开发,支持多种语言。在gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,原创 2020-07-30 22:20:57 · 434 阅读 · 0 评论 -
Java线程只能有上千个,而Go的Goroutine能有上百万个
前言哈喽,大家好,我是asong,我又来做知识分享了。对于做过Java开发的程序员来说,或许会遇到这个问题:java.lang.OutOfMemoryError: Unable to create new native thread。造成这个问题的原因是因为Thread限制导致内存溢出。对于这个问题,我们可以写一个小demo,测试一下这个问题:/** * 功能:Unable to create new native thread * 订阅号:Golang梦工厂 * create by asong原创 2020-06-17 12:32:48 · 598 阅读 · 0 评论 -
2020最新Gin框架中文文档(更新于2020.06)定期维护
## 前言 哈喽,大家好,我是asong。最近在学习Gin框架。在学习的过程 中,一直看英文文档,对于英语渣渣的我来说,很痛苦,就想着给 他翻译过来,弄成中文文档,可以提高我们的学习下效率。网上翻 译过来的文档有很多,不过都很旧了,许多更新也没有处理,不是 很完整。所以我就自己一边学英语、一边翻译了这篇中文文档,现 在分享给你们,希望对你们有用。备注:由于文档是我自己翻译, 有错误欢迎指出。文档已上传个人 github:https://github.com/sunsong2020/Golan原创 2020-06-13 10:18:06 · 2291 阅读 · 0 评论 -
Go语言实现多人聊天室
前言:大家好,我是asong,这是我的第五篇原创文章。最近在忙毕业的事情,事情比较多,鸽了好久。现在终于快完事了,我就来更新文章了。这几天学习了一下beego框架,看了一篇官方文档,看了一个官方样例,在此基础上我进行了修改,加入了数据库,完善了一些功能,可以作为一个入门小demo进行学习。代码已上传Github仓库(https://github.com/sunsong2020/Golang_Dream/tree/master/ChatRoom),可以自行下载学习,能给个star就更好了!!!项目展示我原创 2020-06-05 14:08:37 · 2786 阅读 · 0 评论 -
半小时学会网络爬虫-Go和python两种语言实现,带你白嫖小说
安利想要学习更多Golang语言的知识,请关注我的公众号,我将在第一时间发送文章到公众号,第一时间获取学习资料。你想学习的,我这里都有呦!!!添加方式:微信搜索:Golang梦工厂,或者直接扫描下方二维码即可:前言大家好,我是asong,这是我的第四篇原创文章,这一文,我将介绍网络爬虫系列的教程,使用GO和python分别实现最简单的爬虫------爬取小说。其实这篇文章就是教大家怎么白嫖,在这个网站广告铺天盖地的环境下,我们想单纯的的看会小说也成了一个问题,所以我们就可使用爬虫技术,把小说爬下来原创 2020-05-23 17:10:40 · 1985 阅读 · 0 评论 -
一文带你了解Go的工程管理
前言:大家好,我是asong,这是我的第三篇原创文章。这一篇将对Go的工程管理进行详细的介绍,学习了这些,对我们的日常项目开发有很大帮助。最后对go module的使用进行详细介绍(一定要看到最后呦!)。一、golang中包的概念Go语言中使用包来组织源代码的,并且通过命名空间进行管理。所以所有源代码都必须属于某个包。每个go文件中第一行都必须是以package name声明自己所在包。在介绍包之前,我们需要了解一下Go作用域问题。Go语言的作用域有一点区别于其他语言,所以一定好好掌握这一点,要不就原创 2020-05-15 16:27:15 · 431 阅读 · 0 评论 -
[Golang梦工厂]掌握这些Go语言特性,你的水平将提高N个档次(一)
前言:这一栏是我个人公众号文章,在这里推荐一下我的公众号,专注于Golang相关技术;Golang面试、Beego、Gin、Mysql、Linux、网络、操作系统等。有需要的小伙伴可以关注一下 ,每天观看优质文章。没有使用这门语音,也可以关注一下,提前了解一下,相信你会爱上这门语言。添加方式:公众号搜索 Golang梦工厂 或 扫描下方二维码正文:大家好,我是asong,这是我的第一篇原...原创 2020-05-06 09:50:06 · 519 阅读 · 0 评论