golang 异常处理 在defer中通过recover捕获异常

处理普通错误 参考文章https://www.runoob.com/go/go-...参考1: http://www.topgoer.com/函数/...参考2: https://zhuanlan.zhihu.com/p/...Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。package main import ( "fmt" ) //...阅读全文

Segmentfault 2021-03-28 21:32:33 forlife

Golang语言(打卡✏️第三天)map、递归、报错和练习题|Go主题月

Map(集合)Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。 声明变量,默认 map 是 nilvar hash map[int]int使用 make 函数hash:=make(map[int]int)实例:country:=make(map[string]strin...阅读全文

Segmentfault 2021-03-28 17:32:32 叫我詹躲躲

让你的shell命令在注释中运行起来吧(intellij 插件)

CommentShellCommentShell(CSL)一个可以在注释中运行shell命令的intellij插件。其可以帮助开发者快速在文件内执行指定命令,而不需要在终端去敲打shell命令, 如:开发golang的grpc服务时,我们需要用protoc工具生成pb.go,传统做法是编写完proto文件后在打开终端输入shell命令去生成pb文件,但是现在,你可以用CLS去替代传统做法提高你的开发效率,只需要在单行注释中以x:generate开头, 后面跟上你需要执行的shell命令即可,如:...阅读全文

Segmentfault 2021-03-28 10:32:34 Keson

gin(6)-模板渲染

在golang中模板渲染已经简单到极致了首先看下项目目录`java0904@weigongdeMacBook-Pro templates % tree . ├── html │ └── index.html └── main.go` 代码部分package main import "github.com/gin-gonic/gin" func main() { engine := gin.Default() engine.LoadHTMLGlob("html/*") engine.GET("/i...阅读全文

Segmentfault 2021-03-28 10:32:32 聚合数据

Golang中的并发原语 Singleflight

在Golang中有一个并发原语是Singleflight,好像知道的开发者并不多。其中著名的 https://github.com/golang/groupcache 就用到了这个并发原语。Golang版本go1.15.5相关知识点map、Mutex、channel、使用场景一般用在对指定资源频繁操作的情况下,如高并发下的“缓存击穿”问题。缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去DB读取数据,这些请求都会击穿缓存到DB,造成瞬时DB请求量大、压力瞬间骤...阅读全文

Segmentfault 2021-03-28 10:32:32 cfanbo

go 读写锁实现原理解读

引言锁是编程开发中用于并发控制的一种同步机制,提供多线程(或协程)之间并发读写一个共享数据的方法。在go语言中使用锁也很简单:var loc sync.Mutex var rwLoc sync.RWMutex var idx int var writeRatio = 3 func Inc(){ loc.Lock() defer loc.Unlock() timer := time.NewTimer(100 * time.Millisecond) select{ case <- timer.C: ...阅读全文

Segmentfault 2021-03-27 18:32:33 不加香菜

Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题

作者 | 刘晓敏 GitHub ID:dk-lockdown来源 | 阿里巴巴云原生公众号背景2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang。众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇。Java 版 Seata AT 模式通过对 DataSource 数据源进行代理,在 sql 语句执行时,对 sql 拦截解析,获取数据库对应数据在 sql 语句执行前后的副本,序列化后保存起来,在 TC 协调回滚时用来回滚对应数据。实现...阅读全文

Segmentfault 2021-03-27 09:32:34 阿里巴巴云原生

如何提高Go语言开发效率之快速处理json&table

Golang日程开发中,经常会遇到各种困扰比如编写代码时经常要判断err != nil , 手动编写mysql对应的struct结构体,手动编写json转换struct结构体。如果少量编写任务量其实还好,但是数据较多的时候,或者一个表的字段达到几十个的时候,任务量是繁重且麻烦的。前言自己平时也使用过几个类似解决这样问题的工具,但大部分都不够齐全,比如有json序列化的但没有json转struct这样的功能,总之对于需求而言不够完美。devtools的诞生这个时候devtools工具应用而生,很好...阅读全文

Segmentfault 2021-03-27 09:32:33 阿俊

实习就参与“服务过亿用户的项目”,是什么体验?

作者 | 周天(莫须)来源 | 阿里巴巴云原生公众号大家好,我是周天,花名莫须,一个加入阿里一年的新人。前传作为一个计算机专业的学子,加入阿里是我一直以来的梦想,原因非常简单,因为阿里有着全球最复杂的业务场景之一和最大的流量峰值(双十一),巨大的挑战带来的必然是巨大的技术成就和机会。有了这个目标后,我就开始制定计划,从各种渠道了解到,阿里对人才的评价标准是:基础、热情、成果。首先是基础,由于专业相关,所以基础知识很自然,除了课堂里面的知识(操作系统、计算机网络、数据库、编程语言),我还积极跟进时...阅读全文

Segmentfault 2021-03-26 18:32:33 阿里巴巴云原生

如何提高Go语言开发效率之快速处理json&table

# 如何提高Go语言开发效率之快速处理json&table ![20210325150957](http://qiniu.zhequtao.com/picgo/20210325150957.png) ### Golang日程开发中,经常会遇到各种困扰 > 比如编写代码时经常要判断err != nil , 手动编写mysql对应的struct结构体,手动编写json转换struct结构体。 > 如果少量编写任务量其实还好,但是数据较多的时候,或者一个表的字段达到几十个的时候,任务量是繁重且...阅读全文

Go语言中文网 2021-03-25 15:18:11 arjun

手撸golang GO与微服务 net.rpc之2

手撸golang GO与微服务 net.rpc之2缘起最近阅读 [Go微服务实战] (刘金亮, 2021.1)本系列笔记拟采用golang练习之gitee: https://gitee.com/ioly/learning.gooopnet/rpc微服务中的进程间通信概述 对于进程间通信的技术,开发者有多种选择。 可以选择基于同步通信的通信机制,比如HTTP RESTful; 也可以选择基于异步通信的方式,Go语言提供了标准的net/rpc包以支持异步。 远程过程调用协议(Remote Proce...阅读全文

Segmentfault 2021-03-26 17:32:36 ioly

Golang并发原语之-信号量Semaphore

信号量是并发编程中比较常见的一种同步机制,它会保持资源计数器一直在0-N(N表示权重值大小,在用户初始化时指定)之间。当用户获取的时候会减少一会,使用完毕后再恢复过来。当遇到请求时资源不够的情况下,将会进入休眠状态以等待其它进程释放资源。在 Golang 官方扩展库中为我们提供了一个基于权重的信号量 semaphore 并发原语。你可以将下面的参数 n 理解为资源权重总和,表示每次获取时的权重;也可以理解为资源数量,表示每次获取时必须一次性获取的资源数量。为了理解方便,这里直接将其理解为资源数量...阅读全文

Segmentfault 2021-03-26 17:32:36 cfanbo

Go语言学习笔记3

3.Go语言数据类型其实前面已经涉及到了数据类型的一些知识点。本篇将仔细地讲讲Go语言的数据类型。 3.1 基本数据类型 名称 宽度(字节) 零值 说明 bool 1 false 布尔类型,真用常量true表示,假用常量false表示 byte 1 0 字节类型,可看作uint8的别名类型 rune 4 0 rune类型,专门存储Unicode编码,可看作uint32的别名类型 int/uint - 0 有符号整数类型/无符号整数类型,宽度与平台相关 int8/uint8 1 0 由8位二进制数...阅读全文

51CTO博客 2021-03-25 11:44:02 Huazie

Json序列化在golang中的应用

关于我 作者博客|文章首发 golang对json序列化和反序列化的操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生的写法上就会很难受。 不多BB,开始记录。 序列化库的选择 当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样的,因为性能的体现并不会很明显。但是如果是在实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用json-iterator。 go自带json库 "encoding/json" 官当自带 json-iterator 号称最快的go ...阅读全文

51CTO博客 2021-03-25 11:07:55 qq5c5012ac9b084

LRU缓存机制实现(Go版本)

在我第一次写LRU时,使用map+列表的形式,map使得get和set的时间复杂度为O(1),列表维护插入元素的顺序,当get或set元素时,将元素移动或插入到队头;当达到LRU缓存容量上限时,将列表尾部元素去除掉。但是在列表中调整元素顺序时,时间复杂度达不到O(1)。今天写了一个改进版,使用map+双向链表的形式。map存储key和链表节点的指针,双向链表中既存储key也存储value。map依然用来使get和set的时间复杂度为O(1),当需要将元素移动到队头时,仅需通过map找到节点,将节...阅读全文

Segmentfault 2021-03-26 11:32:32 SyntaxError

Json序列化在golang中的应用

## 关于我 [作者博客|文章首发](http://www.zhouhuibo.club) golang对json序列化和反序列化的操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生的写法上就会很难受。 不多BB,开始记录。 ## 序列化库的选择 当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样的,因为性能的体现并不会很明显。但是如果是在实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用`json-iterator`。 ...阅读全文

Go语言中文网 2021-03-25 11:12:08 happlyfox

结合Kubebuilder与code-generator开发Operator

结合Kubebuilder与code-generator开发Operator一、概念简介1.1 code-generatork8s.io/client-go for talking to a kubernetes cluster.​ k8s.io/client-go 提供了对k8s原生资源的informer和clientset等等,但对于自定义资源的操作则相对低效,需要使用 rest api 和 dynamic client 来操作,并自己实现反序列化等功能。​ code-generator 提...阅读全文

Segmentfault 2021-03-25 21:32:33 DevHan

在vscode中go编码发生的问题整理

关于我 文章首发 | 我的博客 | 欢迎关注 引言 使用VsCode进行Go程序开发,我们肯定会碰到一些问题,这些问题有些是IDE的配置问题,有些是下载包的版本不一致问题,本文主要针对在开发过程中碰到的问题做一个简单的回顾和整理。 前期准备,必看 在进行问题纠错前,先确保自己正确下载了golang的官方工具集go-tool,如果不确定,就跟着我的步骤操作一遍,可能操作后,你的问题就解决了。 1、配置golang的源。 go env -w GOPROXY=https://goproxy.cn,di...阅读全文

简书 2021-03-25 04:32:37 HapplyFox

golang封装解析请求参数(使用不同的请求头)

post 请求时可以根据Header设置的Content-Type使用不同的请求体 POST常用的 Content-Type: multipart/form-data; boundary= html 页面里常用的 form x-www-form-urlencoded 形式如 a=1&b=2和get请求形式一样,只不过是放在post请求体里 application/json post 请求体里传的是 json 字符串 application/xml post 请求体里传的是完整的 xml 另个还可...阅读全文

简书 2021-03-25 04:32:36 tonnyzhang