后端技术总结

  • 首页
  • github
  • About Me
Golang
Golang

golang之从源码角度看slice的len和cap

举例 len和cap的关系我们举个恰当的例子来看就是cap比作一个水瓶,len比作这个水瓶中此时所装载水的容量,而当瓶子大小装不下水的时候,也就是这个slice的扩容append我们暂时不讨论。 我们直接先从一道关于slice的题来开始: func main() { var array [20]int fmt.Println(array) slice1 := array[10:11] fmt.Println(slice1) fmt.Println(len(slice1)) fmt.Println(cap(slice…

2022年1月3日 0条评论 950点热度 0人点赞 PingD 阅读全文
Golang

基于chan实现的简易协程池及说明

背景 项目开发时,在某些业务场景我们可能需要控制服务的并发数量,不想引入比较复杂的协程池,只想简单实现。下面我们就可以利用channel特性,几行代码搞定这个需求! 代码实现 package main import ( "fmt" "time" ) var ( sig chan struct{} poolSize = 3 // 用来控制同步并发大小 ) func init() { sig = make(chan struct{}, poolSize) } func simpl…

2021年10月11日 0条评论 1328点热度 1人点赞 PingD 阅读全文
Golang

Go-如何将任意int或float转成string

from: https://stackoverflow.com/questions/44539789/how-to-convert-number-int-or-float64-to-string-in-golang Q: 我如何将给定的任意int或float64类型的数字转义为string类型?如果使用strconv.FormatFloat或FormatInt的话我需要提前之前它是int或float才行,当我们提前不知道它们类型且不知道float的有效数字长度的情况下怎么格式化? 比如: 当我得到一个数字5,它应该…

2021年4月21日 0条评论 2626点热度 0人点赞 PingD 阅读全文
ETCD

记踩Etcd的一个坑

背景 最近一个服务引入了etcd,用于主从,编译能够正常通过,但是在run阶段出现如下panic: 2020-12-14 13:36:42.799342 I | WARNING: proto: message authpb.User is already registeredA future release will panic on registration conflicts. See:https://developers.google.com/protocol-buffers/docs/reference/g…

2021年4月21日 0条评论 2760点热度 5人点赞 PingD 阅读全文
Golang

Golang之go get golang.org/x timeout

背景 使用软件项目开发过程中是离不开开发环境的,而我们的Golang环境更不可能离开golang.org包,但我们在编译或者安装某个包时,常会提示 "golang.org/x/(ooo引用不同包,报的错会不一样)" (https fetch: Get https://golang.org/x/net/(ooo引用不同包,报的错会不一样)?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) 毫无疑问,这是网络问题,这个地址在国内是不能轻易访问而导致下…

2021年4月21日 0条评论 1791点热度 0人点赞 PingD 阅读全文
Golang

Golang之defer

背景 defer在golang中属于关键词,主要用于资源释放,会在函数返回之前被调用,但其中也包含了很多的坑。下面我们通过几个常见例子来进行相关的讲解。 例子 // e.g.1 func f1() (r int) { defer func() { r = r + 5 }() return 1 } // e.g.2 func f2() (r int) { t := 5 defer func() { t = t + 5 }() return t } // e.g.3 func f3() (r int) { t := 5…

2021年4月21日 0条评论 953点热度 0人点赞 PingD 阅读全文
Golang

Go之底层利器-AST遍历

背景 最近需要基于AST来做一些自动化工具,遂也需要针对这个神兵利器进行一下了解研究。本篇文章也准备只是简单的讲解一下以下两个部分: 通过AST解析一个Go程序 然后通过Go的标准库来对这个AST进行分析 AST 什么是AST,其实就是抽象语法树Abstract Syntax Tree的简称。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。 主菜 开胃提示语 以下内容有点长,要不先去买点瓜子,边磕边看? 编…

2021年4月21日 0条评论 2280点热度 2人点赞 PingD 阅读全文
Golang

Go json裁剪

背景 项目中遇到一个使用场景:服务端要保存用户上传的json格式示例,但是服务端针对这个json格式示例有大小限制,比如1KB,超过这个大小后服务端就不能正常保存了。此时用户正好手里有个比较大(>1KB)的json示例,他要想将这个示例正常保存可以进行两种不同操作: 手动去裁剪这个json字符串; 通过智能的方式自动将一些重复且不必要的数据删除掉,以达到json裁剪的目的 显然,针对第一种方式不太明智,那我们如果采用第二种方式的话,又该怎么做呢? 操刀 在Go里面,我们引用官方标准库encoding/json…

2020年10月30日 0条评论 935点热度 0人点赞 PingD 阅读全文
Golang

golang 判断interface是否为空nil

前言 interface很好用,可以存取任意类型,但我们在使用这个值类型的时候我们往往又需要知道该interface是属于哪种类型的,以便正确使用这个值。比如,如果我们提前知道该interface为int,则都是这样使用: var a interface{} a = 5 fmt.Println(2*a.(int)) 而往往我们interface可能会存放多种不同类型的数据,为了健壮,在使用时我们需要判断interface里面存放的到底为何种类型的数据,以及这些数据是否为空?比如你引用了一个类型里面的空对象是很容易引…

2020年9月2日 0条评论 3026点热度 2人点赞 PingD 阅读全文
Golang

Go查看项目引用的包版本及当前最新的版本

有时候我们需要知道当前项目引用的外部pkg是否是最新的版本,而如果通过go.mod里面一个一个去看明显显得有一点点弱,此时我们可以采用go list这个命令,直接查看当前项目的引用版本以及最新的版本,命令如下:go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all 执行后如下: ➜ go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all git.querycap.c…

2020年8月18日 0条评论 2359点热度 1人点赞 PingD 阅读全文
12

PingD

反思让我成长

归档
  • 2023年1月
  • 2022年3月
  • 2022年1月
  • 2021年10月
  • 2021年8月
  • 2021年4月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2019年9月
  • 2019年7月
  • 2019年6月
  • 2019年4月
  • 2019年3月
分类
  • ETCD
  • Golang
  • 总结
  • 脚本
  • 随笔
最近评论

COPYRIGHT © 2021 dpjeep.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

蜀ICP备18036663号-1