漫画Go语言中的错误处理/异常捕获

赖思与甜甜,有趣有料有温度,技术学习有思路! 错误处理是每个编程语言都要考虑的一个重要话题。 看看赖思怎么给甜甜讲解Go语言的错误处理吧!​​​​外层Marshal函数作用是进行json编码并返回。marshal函数在开始遇到defer, 会将其后要延迟执行的方法“压栈”;当defer被触发时,再将所有“压栈”的方法“出栈”并执行。如果这个流程中没有异常,会在return后且程序返回前,触发derfer。而recover函数的返回值是nil,所以err是nil;而当函数执行出现了异常,函数将停止...阅读全文

Go语言中文网 2021-03-14 18:13:31 kep-w

多重返回值的阵营九宫格

通常在糊业务代码的时候,不管是函数、方法,还是宏,都只会有一个返回值。比如在C语言用于检查一个字符是否为阿拉伯数字的isdigit函数就只会返回是(1)或否(0)#include <ctype.h> #include <stdio.h> int main(int argc, char *argv[]) { char c = 'a'; printf("isdigit('%c') is %d\n", c, isdigit(c)); return 0; }但有时候如果一个函数、方法,或宏可以返回多个值...阅读全文

Segmentfault 2021-03-17 13:32:34 Liutos

go 使用pprof 排查内存泄露

go 是自带gc的语言,会自动管理内存,不用像C/C++那样,需要程序员手动释放内存,不用手动管理内存,就能少掉很多头发 go的GC会自动管理内存,但是这不代表go程序就不会内存泄露了。 go常见产生内存泄露的原因就是goroutine没有结束,简单说就是goroutine 被阻塞了,这样就会导致goroutine引用的内存不被GC回收,也就导致了内存写了。 当然产生内存泄露的原因还有别的,只是暂时我还没有遇到。不管什么原因产生的内存泄露,最终都是因为异常的引用,导致该被回收的内存没有被gc 回...阅读全文

简书 2021-03-14 15:32:42 紫葡萄0

web安全学习方法与职业介绍-1

学习方法 1.做笔记,对笔记进行分类 2.多实践,将实践的内容截图笔记 3.不耻下问,不懂得内容及时提出来 职业发展(根据行为不同,叫法不同): 白客:漏洞提交 黑客:利用漏洞谋利 骇客:利用漏洞造成破坏性 红客:阻挡国外黑客,或对国外进行攻击 src:企业安全应急响应中心 web安全工程师(安服仔)(掌握技能):运维基础,web安全 (10k左右) 渗透测试工程师(掌握技能): 中级:web安全,内网渗透,各种代码(python,GoLang,JAVA) (15k左右) 高级:web安全,内网...阅读全文

简书 2021-03-14 15:32:35 大灰狼爱上小红帽

Golang 泛型初探

Golang 的泛型实现已经正式合并到 master 分支上啦,之后也会在 master 分支上进行开发,那么作为期待这个 feature 许久的 gopher,也想第一时间看看到底是如何实现的。语法这里不过多讲解泛型的语法,具体可以参考一下 https://github.com/golang/go/issues/43651 这个 issue。简单来说,在 struct 和 func 的名字后面可以加一个 [] 里面包含泛型的名字和限制条件,比如:123type container[T any]...阅读全文

Pure White 2021-03-09 00:00 Pure White

JSON序列化与反序列化

一、JSON简介如下图所示: json的序列化与反序列化 有一实用网站如下:JSON在线解析及格式化验证 JSON解析网站网站 二、JSON的序列化Golang中,要用到JSON有关方法需要import "encoding/json" import 这样就可以用json.Marshal()函数1、struct的序列化若有一struct如下: struct 对struct做序列化并输出 这里要注意json.Marsha(参数)方法里的参数是传的指针。所以我们struct类型要求加上取地址符。输出如...阅读全文

简书 2021-03-14 02:32:44 柯帆

手撸golang GO与微服务 Saga模式之3

缘起 最近阅读<<Go微服务实战>> (刘金亮, 2021.1) 本系列笔记拟采用golang练习之 Saga模式 saga模式将分布式长事务切分为一系列独立短事务 每个短事务是可通过补偿动作进行撤销的 事务动作和补动作偿都是幂等的, 允许重复执行而不会有副作用 Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是...阅读全文

简书 2021-03-14 00:32:36 老罗话编程

手撸golang GO与微服务 Saga模式之3

缘起最近阅读<<Go微服务实战>> (刘金亮, 2021.1)本系列笔记拟采用golang练习之Saga模式saga模式将分布式长事务切分为一系列独立短事务每个短事务是可通过补偿动作进行撤销的事务动作和补动作偿都是幂等的, 允许重复执行而不会有副作用Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是避免使用长期持...阅读全文

golang造轮子,封装一个简单的http client

近来无事,本着爱折腾的原则,在go原生 http client 的基础上,自己封装了一个go的http client。由于才疏学浅,再加是第一次造轮子,在各位大佬面前献丑了,写的烂的地方,请轻喷。还请各位不吝赐教。 先放地址 gethub: https://github.com/bruce12397/easy_http Gitee: https://gitee.com/bruce_le/easy_http 简单介绍一下功能 使用 构造器模式,提供了链式调用和方便使用的接口 支持https自定义服...阅读全文

简书 2021-03-13 23:32:41 紫葡萄0

golang使用unsafe包实现指针运算操作private变量

golang中是有指针概念的,但是go中的指针功能被限制了,不像C/C++中那样,可以对指针进行运算 比如在C/C++中 *p++ 这样是正确的。但是在go中,这样写是错误的。至于go为什么会屏蔽指针的运算,比较多的一种说法是go团队认为指针的运算会带来一些安全问题,再有就是简化语法,所以go直接就不支持指针运算了。 虽然go语法不支持,但是通过go的 unsafe 包可以间接的实现对指针的运算,就想这个包的名字一样,这个包提供的东西不是安全的,使用不当可能会出现一些问题,所以在go是不推荐使用...阅读全文

简书 2021-03-13 23:32:41 紫葡萄0

聊聊golang的clean architecture项目结构

序 本文主要研究一下golang的clean architecture项目结构 clean architecure image clean architecture定义了四层结构,最内层是entities(enterprise business rules),再往外是use cases(application business rules),接着是interface adapters(比如controller、presenters、gateways),最外层是frameworks & drive...阅读全文

简书 2021-03-13 23:32:39 go4it

2021-03-13:手写代码:单链表快排。

2021-03-13:手写代码:单链表快排。 福大大 答案2021-03-13: 根据链表的表头三分。比表头小的元素放左边,比表头大的元素放右边,等于表头的元素放中间。然后递归左边和递归右边。最后合并左、中、右。 代码用golang编写,代码如下: package main import "fmt" func main() { //head := &ListNode{Val: 4} //head.Next = &ListNode{Val: 2} //head.Next.Next = &ListN...阅读全文

简书 2021-03-13 23:32:39 福大大架构师每日一题

聊聊golang的clean architecture项目结构

序本文主要研究一下golang的clean architecture项目结构clean architecureclean architecture定义了四层结构,最内层是entities(enterprise business rules),再往外是use cases(application business rules),接着是interface adapters(比如controller、presenters、gateways),最外层是frameworks & drivers(比如web、...阅读全文

Segmentfault 2021-03-17 10:32:34 codecraft

Go 的容器数据结构

前言Java 内置了丰富的容器类,不同容器用于处理各种业务场景。 Go 虽然语言设计上和 Java 有很多相似的地方, 但原生并没有支持太多容器类的数据结构,只有 map 和 slice。标准库的 container package 对容器数据结构做了扩展,支持堆(Heap)、链表(LinkedList) 和循环链表(Circular List)3个容器。容器熟悉 C++ 和 Java 对容器应该都有清晰的了解, 它是现代编程实践中不可或缺的一部分,具有多种形式, 一般被描述为具有操作容器内容的...阅读全文

Segmentfault 2021-03-17 09:32:38 lryong

如何升级基础架构

个人习惯,项目中使用的基础架构都会保持同步更新升级,比如jdk,golang,vue,viewui,spring cloud等等。开源项目的升级都会解决原有版本的问题,比较大的版本升级,也会带来很大的性能方面的提升。比如Spring Cloud中用WebClient代替Feign,使用ReactiveBalancer,go版本的更新会带来编译速度提升,编译后可执行文件变小,内存资源占用率更低等等。 基础架构升级,是不是只是修改相关项目的版本号呢?的确,当小版本升级的时候,有时候就是这样,基本修改...阅读全文

Go:基于Context API实现分布式请求日志记录

【译文】原文地址 如今随着微服务架构的普及,它也成为构建服务端应用的首选方式。过去记录日志只需要将日志类注入主类里面就这么简单,请求跟踪可以通过在请求过程中产生一个唯一id并添加到日志里面即可。在微服务架构当中,还是可以使用这种方法。然而,这种方式会导致在不同的微服务中日志的不连贯。本文使用Go给出一个简单的HTTP pipeline,并在所有的服务中都共享请求id。 要实现系统级的日志连贯,我们在微服务中必须共享标志符。在HTTP APIs场景下,可以通过请求头来传输标志符。这种实现方式,我们...阅读全文

简书 2021-03-13 02:32:39 汪明军_3145

GoCenter 助力 Golang 全速前进

背景Go 语言是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为 Golang。自2009年11月 Google 正式宣布推出,成为开放源代码项目以来,Go 语言已成为当今开发人员和 DevOps 领域最流行的语言之一, 它被用于设计和编写 Kubernetes 和 Helm。但是,相比语言本身已经得到了广泛的普及和使用,Go 语言的包管理方案却大大滞后了。 Go 语言生态系统中缺少的是标准化——没有用于依赖关系管理的标准工具...阅读全文

51CTO博客 2021-03-12 09:25:38 mob604756e6cfe5

2021-03-12:go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理

2021-03-12:go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理的? 福哥答案2021-03-12: runtime/pprof:采集程序(非 Server)的运行数据进行分析。net/http/pprof:采集 HTTP Server 的运行时数据进行分析。 日志用logrus,海量日志用kafka。 这块不太熟,所以写的简单,实在抱歉。阅读全文

51CTO博客 2021-03-12 22:01:55 福大大