随笔分类 -  Go

摘要:需求 有个需求,要存储当月的所有打卡记录,日历 比如以下是我的打卡记录 对应到JSON的数据是这样的 { "day1":1, "day2":1, "day3":0, "day4":1, "day5":0, "day6":0, "day7":1, "day8":0, "day9":0, "day10" 阅读全文
posted @ 2021-06-29 16:13 雪山飞猪 阅读(2443) 评论(32) 推荐(1) 编辑
摘要:前言 框架思维非常重要,和语言无关,这是一种非常重要的抽象能力,吹得厉害一点,就是要有高屋建瓴,统筹全局的能力。 无限级树型结构的创建也是有套路的,下面由伟大的诗人chenqionghe给出套路框架,再分别套上相应的编程语言实现。 最终达到看到框架就能实现对应编程语言的代码,或者也可以直接copy实 阅读全文
posted @ 2021-06-10 14:08 雪山飞猪 阅读(687) 评论(0) 推荐(0) 编辑
摘要:以下内容由伟大的诗人、哲学家chenqionghe吐血传授,希望能帮助到你,谢谢~ 一、Context包到底是干嘛用的 我们会在用到很多东西的时候都看到context的影子,比如gin框架,比如grpc,这东西到底是做啥的? 大家都在用,没几个知道这是干嘛的,知其然而不知其所以然 谁都在CRUD,谁 阅读全文
posted @ 2020-12-09 11:58 雪山飞猪 阅读(1528) 评论(2) 推荐(4) 编辑
摘要:一、需求 最近有一个需求,要实现一个无限级结构的树型菜单,差不多长下面这个样子 我们知道无限级实现思路都是用一个parent_id将各种层级串联起来,顶级的parent_id为0,例如如下层级的菜单 菜单一 菜单二 菜单三 菜单四 菜单五 菜单六 菜单7 菜单八 在数据库中的存储一般是如下形式 原理 阅读全文
posted @ 2020-11-24 16:51 雪山飞猪 阅读(749) 评论(0) 推荐(1) 编辑
摘要:问题 Go语言的Map是无序遍历的,遍历一个map代码如下 package main import ( "fmt" ) func main() { m := map[string]int{"Apple": 20, "Tomato": 12, "Banana": 18} for k, v := ran 阅读全文
posted @ 2020-11-10 22:23 雪山飞猪 阅读(7732) 评论(3) 推荐(0) 编辑
摘要:预先初始化 在外部var初始化 package main import ( "fmt" "time" ) var startTime = time.Now() func main() { fmt.Println(startTime) } 在init函数初始化 package main import 阅读全文
posted @ 2020-11-09 11:51 雪山飞猪 阅读(2184) 评论(0) 推荐(0) 编辑
摘要:虽然Go语言提供channel来保证协程的通信,但是某些场景用锁来显示保证协程的安全更清晰易懂。 Go语言中主要有两种锁,互斥锁Mutex和读写锁RWMutex,下面分别介绍一下使用方法,以及出现死锁的常见场景。 一、Mutex(互斥锁) Mutex是互斥锁的意思,也叫排他锁,同一时刻一段代码只能被 阅读全文
posted @ 2020-11-03 11:39 雪山飞猪 阅读(13123) 评论(0) 推荐(3) 编辑
摘要:代码 以下实现了两个方法,分别是 设定最大重试次数,对一个方法进行重试 设定最大重试时间,对一个方法进行重试 //重试,限制次数 func RetryTimes(name string, tryTimes int, sleep time.Duration, callback func() error 阅读全文
posted @ 2020-10-22 11:48 雪山飞猪 阅读(2244) 评论(0) 推荐(0) 编辑
摘要:需求 sentry是一款非常好用的工具,可以方便追踪线上的异常,在gin框架里边可以使用Use添加中件间,但是grpc服务在网上搜索了一堆没一个能用的,只能硬着头皮看源码 终于搞定! grpc服务有一个github.com/grpc-ecosystem/go-grpc-middleware的中间件插 阅读全文
posted @ 2020-09-16 11:58 雪山飞猪 阅读(1162) 评论(0) 推荐(1) 编辑
摘要:问题 我们知道go语言的time.Time类型在转为json的时候,输出的是UTC的时间,而我们绝大部分时候使用的都是Datetime格式。 其实解决问题的核心就是使用自定义字段,实现json的MarshaJSON方法 一、示例:原生time.Time的json输出为UTC格式 例如,我们有一个商品 阅读全文
posted @ 2020-07-31 14:32 雪山飞猪 阅读(6539) 评论(0) 推荐(2) 编辑
摘要:一、需求 golang默认的结构体json转码出来,都是根据字段名生成的大写驼峰格式,但是一般我们最常用的json格式是小写驼峰或者小写下划线,因此,我们非常需要一个统一的方法去转换,而不想挨个写json标签,例如 package main import ( "encoding/json" "fmt 阅读全文
posted @ 2020-06-08 18:40 雪山飞猪 阅读(11622) 评论(2) 推荐(1) 编辑
摘要:通过封装IsZeroOfUnderlyingType方法判断,代码如下 package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func IsZeroOfUnderlyingType(x i 阅读全文
posted @ 2020-06-03 16:38 雪山飞猪 阅读(2679) 评论(0) 推荐(0) 编辑
摘要:前言 新手程序员大概有如下特点 if嵌套经常超过3层、经常出现重复代码、单个函数代码特别长。 只会crud,对语言特性和语言的边界不了解。 不懂面向对象原则和设计模式,以为copy代码就算学会了,常见的是代码职责不明确或者写出万能类 不知道数据结构和算法的重要性,以为靠硬件能解决所有运行慢的问题 架 阅读全文
posted @ 2020-05-25 17:20 雪山飞猪 阅读(8395) 评论(6) 推荐(2) 编辑
摘要:[toc] 前言 "Cobra" 是一个强大的用来构建命令行程序的库,许多流行的Go项目都是用它来构建的,比如Kubernetes、Docker、etcd、Istio、Github CLI等等。 接下来,演示开发一个我们自己的命令行程序chenqionghe,模仿一下docker命令行,预期功能如下 阅读全文
posted @ 2020-04-08 18:51 雪山飞猪 阅读(2677) 评论(2) 推荐(3) 编辑
摘要:一、gRPC是什么? gRPC,其实就是RPC框架的一种,前面带了一个g,代表是RPC中的大哥,龙头老大的意思,另外g也有global的意思,意思是全球化比较fashion,是一个高性能、开源和通用的 RPC 框架,面向服务端和移动端,基于 HTTP/2 设计。 RPC框架是什么? RPC 框架说白 阅读全文
posted @ 2020-03-02 12:06 雪山飞猪 阅读(24715) 评论(7) 推荐(6) 编辑
摘要:[toc] 一、需求 公司有一个比较坑爹的报销方案,需要根据一堆零碎的发票中,凑出一个目标金额,要求误差在1块钱以内。 例如:你有一堆发票[100, 101, 103, 105, 106, 132, 129, 292, 182, 188, 224.3, 40.5, 35.9, 32.5, 39, 1 阅读全文
posted @ 2020-02-28 23:53 雪山飞猪 阅读(1328) 评论(0) 推荐(1) 编辑
摘要:问题: 原因很明显,是因为go get是基于git的方式获取仓库的,然后默认用的是https的,被拒绝了,我们需要换成ssh的 解决 命令行替换 阅读全文
posted @ 2020-02-28 21:43 雪山飞猪 阅读(4453) 评论(0) 推荐(0) 编辑
摘要:问题:19.90转为float64类型,再乘以100,精度丢失 废话不说多,show you the code 运行输出 19.9转成float64后,再乘以100,居然变成了1989.9999999999998 这个精度的问题要是出现在现金的问题上就厉害了! 解决 使用包的decimal类型:gi 阅读全文
posted @ 2020-01-08 17:10 雪山飞猪 阅读(11176) 评论(6) 推荐(0) 编辑
摘要:优先级队列的底层实现是堆(最大堆、最小堆) 一、堆的特点 1. 完全二叉树 2. 每个节点的值都必须大于等于或小于等于子树中节点的值(对应最大堆、最小堆) 3. 往堆中插入和删除一个元素的时间复杂度都是O(logn) 二、实现 最大堆和最小堆实现原理基本一样,下面实现一个最大堆 输出 三、堆排序 1 阅读全文
posted @ 2020-01-07 14:31 雪山飞猪 阅读(1572) 评论(0) 推荐(0) 编辑
摘要:interface空指针不为nil 当把一个空指针对象赋值给一个interface后,再判断!= nil就不再成立了 代码如下 运行结果 test本来是nil,赋值给person后居然不能再用nil判断了 解决方法 使用reflect包的IsNil判断,封装为一个能用方法 全部示例代码 运行结果 完 阅读全文
posted @ 2019-08-15 11:37 雪山飞猪 阅读(5180) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示