
语言
文章平均质量分 91
记录一下编程语言相关的知识点
程序员麻辣烫
这个作者很懒,什么都没留下…
展开
-
查表法与switch有什么区别?
查表法和switch的能力有很大重合,两者都可通过“索引”找到指定元素,但它们有哪些区别呢?在不同场景下我们应如何选择?原创 2022-10-24 13:23:14 · 562 阅读 · 0 评论 -
Effective GO
最近有人推荐Effective Go,这本书算是给初学者看的,因为已经看多很多Go方面的书了,所以再看这本书,总体收获较小,文章地址:https://learnku.com/docs/effective-go/2020讲述的知识里,有几点印象深刻一些,在这里分享出来格式化go fmt:https://www.jianshu.com/p/104b33439ac2new和make区别new:用来分配内存的内建函数, 但与其它语言中的同名函数不同,它不会初始化内存,只会将内存置零。 也就是说,原创 2020-09-20 21:07:07 · 1026 阅读 · 0 评论 -
Go defer的一些神奇规则,你了解吗?
defer有一些规则,如果不了解,代码实现的最终结果会与预期不一致。对于这些规则,你了解吗?原创 2022-02-26 11:27:26 · 225 阅读 · 0 评论 -
常见HTTP错误码模拟
最近发现部分同学虽然知道HTTP错误码,但对产生的具体原因并不清楚,所以我打算对比较常见的错误码进行模拟,帮助大家理解。原创 2021-11-28 23:40:31 · 3135 阅读 · 0 评论 -
搞明白Go的值和指针,别写bug了
最近多次出现同事误用指针导致系统bug,所以这次聊一下Go的值与指针,大家尽量避免写出错误代码。原创 2021-11-21 17:51:59 · 481 阅读 · 0 评论 -
Redis的事务,Go+lua用起来真香
Redis是应对高并发的常用工具,在常用缓存技巧中讲过相关技巧。但有些业务场景,使用Redis会遇到问题,如电商里的秒杀、扣减库存等。Redis有没有像MySQL原子性一样的能力,来解决这个问题呢?原创 2021-10-29 10:15:31 · 1195 阅读 · 0 评论 -
整数区间计算,我这么设计
go-intervals是一个用于在一维区间(例如时间范围)上执行集合操作的库原创 2021-08-05 10:03:42 · 443 阅读 · 0 评论 -
Go锁,我终于搞懂了
我就是想知道锁是怎么实现的,结果整一堆优化逻辑,感觉懂了又感觉啥都不懂。所以我痛定思痛,我看早期版本行吧。来让我们看2014年的版本原创 2021-07-26 15:08:47 · 1607 阅读 · 0 评论 -
Go互斥锁实现原理
Go语言中的锁简单易用,本文整理一下锁的实现原理。Golang中锁有两种,互斥锁Mutex和读写互斥锁RWMutex,互斥锁也叫读锁,读写锁也叫读锁原创 2021-07-19 11:25:14 · 1186 阅读 · 0 评论 -
再也不怕获取不到Gin请求参数了
以前阅读过Gin源码、并仿照Gin自己写了一个简单版的框架。Gin框架简洁版Gin源码剖析最近在使用的时候,发现前端调用传递参数方式各异,各种稀奇古怪的方式都会用到。这篇文章主要盘一下如何获取到参数,方便今后使用。代码位置:https://github.com/shidawuhen/asap/tree/master/controller/paramtype1.类型HTTP请求方法有很多[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传我们常用的是GET和POST,本次主原创 2021-06-02 09:27:47 · 3332 阅读 · 0 评论 -
一文搞懂pprof
pprof是GoLang程序性能分析工具,prof是profile(画像)的缩写,用pprof我们可以分析下面9种数据真正分析时常用4种CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括原创 2021-05-12 15:22:45 · 5566 阅读 · 0 评论 -
Gin源码剖析
介绍Gin 是一个 Golang 写的 web 框架,具有高性能的优点,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务。官方地址:https://github.com/gin-gonic/gin。使用在项目中使用Gin也极其简单下载gin: go get -u -v github.com/gin-gonic/ginimport中引入"github.com/gin-gonic/gin"核心代码r := gin.Default()r原创 2021-04-22 23:30:17 · 1226 阅读 · 0 评论 -
Gin框架简洁版
介绍看完Gin源码后,我在想是否可以尝试自己写一个简单的web-go框架,既能帮助自己更好的理解Gin,又能当做一个测验,检测自己是否真的学会了一些东西。所以自己做了一个简单版的框架,这个框架包含了一些Gin框架的核心内容,感兴趣的朋友可以先看这个简单版的框架,然后再看我写的gin源码剖析,可能会更加容易理解。写这个小框架的时候,突然想起了以前看侯捷的深入浅出MFC,有一章的标题叫-MFC六大关键技术之仿真。这个简洁版也算是gin框架的一个仿真吧。框架写的很简单,主要是为了学习目的,可能有很多的漏洞原创 2021-04-22 23:27:32 · 367 阅读 · 0 评论 -
Go工具之generate
本文给大家介绍Go的一个实用技巧,该技巧主要通过go工具实现。传统写法大家经常碰到命名错误码、状态码的同时,又要同步写码对应的翻译,有没有感觉很无聊。这里举一个例子:package mainimport "fmt"// 定义错误码const ( ERR_CODE_OK = 0 // OK ERR_CODE_INVALID_PARAMS = 1 // 无效参数 ERR_CODE_TIMEOUT = 2 // 超时)// 定义错误码与原创 2021-03-21 15:27:16 · 1506 阅读 · 1 评论 -
Go单例实现方案
单例模式大家都比较了解,定义如下:一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。单例模式虽然理解起来比较简单,但是真正实现的时候有很多细节需要考虑,一般考虑点有如下几个:构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例考虑对象创建时的线程安全问题考虑是否支持延迟加载考虑 getInstance() 性能是否高(是否加锁)代码语法不同,对于这几点关注程度也不同。对于Go语言,在原创 2021-03-15 09:12:56 · 487 阅读 · 0 评论 -
Go通道实现原理
简介channel是Go语言的一大特性,基于channel有很多值得探讨的问题,如channel为什么是并发安全的?同步通道和异步通道有啥区别?通道为何会阻塞协程?使用通道导致阻塞的协程是如何解除阻塞的?要了解本质,需要进源码查看,毕竟源码之下了无秘密。原理创建channel理论上有三种,带缓冲\不带缓冲\nil,写法如下:// bufferedch := make(chan Task, 3)// unbufferedch := make(chan int)// nilva原创 2020-12-19 16:11:19 · 904 阅读 · 2 评论 -
GoLang定时器实现原理
简介工作中经常有定时执行某些代码块的需求,如果是PHP代码,一般写个脚本,然后用Cron实现。Go里提供了两种定时器:Timer(到达指定时间触发且只触发一次)和 Ticker(间隔特定时间触发)。Timer和Ticker的实现几乎一样,Ticker相对复杂一些,这里主要讲述一下Ticker是如何实现的。让我们先来看一下如何使用Ticker//创建Ticker,设置多长时间触发一次ticker := time.NewTicker(time.Second * 10)go func() {原创 2020-12-15 20:25:35 · 3010 阅读 · 0 评论 -
golang中string int float bool类型相互转换
golang中string int float bool类型相互转换package mainimport ( "fmt" "strconv")func IntToString() { //todo :int to string v := 456 vS := strconv.Itoa(v) fmt.Println(vS) //方法1,简便版 //todo :int64 to string var vI64 int64 = 789 vInt64S := strconv.Forma原创 2020-12-08 21:02:52 · 11752 阅读 · 0 评论 -
Beego框架使用
介绍我们组服务端使用了Beego框架,使用的相对合理,本篇文章简单聊一下我们是如何使用框架的。大家如果对Beego框架如果不熟悉,可以先看一下这篇文章 https://beego.me/ ,了解如何使用。分析BeegoBeego设置路由的函数为func Router(rootpath string, c ControllerInterface, mappingMethods ...string) *App { BeeApp.Handlers.Add(rootpath, c, mapp原创 2020-09-22 19:26:37 · 2172 阅读 · 0 评论 -
Golang源码COOKIE BUG追查
起因最近的项目从golang0.9升级到golang1.13后,项目中出现了很特殊的现象,在APP里,用户登录后访问页面正常,用户不登录,报错。处理过程Charles抓包发现,登录的情况下,服务返回的是protobuf的数据,未登录情况下返回的是json结构。服务是根据cookie中传入的数据来返回对应的数据类型。初步断定未登录情况下无法获取到cookie检查登录和未登录情况下cookie的区别。登录:serviceToken=abc;type=protobuf;session=123原创 2020-07-05 13:28:19 · 516 阅读 · 0 评论 -
Golang长连接-基于WebSocket
Websocket简介WebSocket可以实现客户端与服务器间双向、基于消息的文本或二进制数据传输。它是浏览器中最靠近套接字的API。但WebSocket连接远远不是一个网络套接字,因为浏览器在这个简单的API之后隐藏了所有的复杂性,而且还提供了更多服务:连接协商和同源策略;与既有HTTP基础设施的互操作;基于消息的通信和高效消息分帧;子协议协商及可扩展能力。WebSocket资源URL采用了自定义模式:ws表示纯文本通信(如ws://example.com/socket),wss表示使用原创 2020-06-15 15:08:02 · 4851 阅读 · 2 评论