Golang中panic与recover的实现原理

今天我们讲讲golang中panic异常,以及recover对异常的捕获,由于panic、recover、defer之间非常亲密,所以今天就放在一起讲解,这里会涉及到一些defer的知识,有兴趣可以看我的另一篇关于defer的文章 Golang中defer的实现原理. Panic异常 Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、 空指针引用等。这些运行时错误会引起painc异常。 一般而言,当panic异常发生时,程序会中断运行,并立即执行在该gorouti...阅读全文

简书 2020-10-25 11:32:39 书生也爱羊

Golang标准库——unsafe

unsafe unsafe包提供了一些跳过go语言类型安全限制的操作。 type ArbitraryType type ArbitraryType int ArbitraryType在本文档里表示任意一种类型,但并非一个实际存在与unsafe包的类型。 type Pointer type Pointer *ArbitraryType Pointer类型用于表示任意类型的指针。有4个特殊的只能用于Pointer类型的操作: 1) 任意类型的指针可以转换为一个Pointer类型值 2) 一个Poin...阅读全文

简书 2020-10-25 02:32:39 DevilRoshan

编程语言的力量

也许正是学会了八卦才让智人击败了其他人种 最早的人类是从大约250万年前的东非开始演化,祖先是一种更早的猿属“南方古猿”。他们一部分人离开家园踏上旅途,足迹遍布北非、欧洲和亚洲,逐渐开始分化出不同的特征,以适应不同地域的环境。在那样一个史前时代,他们又是如何团结在一起克服困难维持种族的生存呢?我想正是语言的产生,让他们有了高效的机动能力,也正是语言的产生,让我们的祖先开始叽叽喳喳的八卦族内族外的事情,信息的获取由此开始,人类文明也借助语言开始往高阶的方向发展起来。 德国曾出版过一本语言工具手册—...阅读全文

简书 2020-10-25 02:32:38 果仁不仁

Go 协程堆栈设计进化之旅

- 后端早读课翻译计划 第四篇- - 翻译自: a-journey-with-go 欢迎关注微信公众号: 后端早读课 本文详细讲述了 Golang 中,堆栈设计理念以及演变过程。描述了从 Segment Stack 到 Contiguous Stack 、初始堆栈大小从 8Kb 到 2Kb 的原因。 Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee Fr...阅读全文

简书 2020-10-24 21:32:39 人类观察所主任

【Golang】context.Context解析

最近听了一位同事的分享,他说如果一个人不能把它所研究的项目/概念用十分简单的话表述清楚,那么就说明他并没有真正理解这个项目。然后他拿物理中粒子的自旋进行举例,有人向教授请教相关概念,教授说:我需要思考一下如何用浅显的话进行表述。稍许之后,教授说:很抱歉,可能我只能用非常复杂的公式和概念向你解释了。这说明了可能人类对于这一现象的本质并没有理解。 结合我的上一篇文章 最近的一些感悟 - 体系的力量 ,这更加说明了我们在学习的时候其实就是拨开繁杂的迷雾,去窥探一个概念、一个项目、一个体系它最核心的本质...阅读全文

简书 2020-10-24 20:32:38 千杉沐雪

牛皮了!世界级架构师,图解面向对象编程,小学生都能看得懂

何为面向对象编程面向对象编程(Object-oriented Programming,缩写:OOP)是软件工程中一种具有对象概念的编程范式(Programming Paradigm),同时也是一种程序开发的抽象方针,与之对应的编程范式还有:函数式编程(Functional Programming)、过程式编程(Procedural Programming)、响应式编程(Reactive Programming)等。随着计算机科学的发展,面向对象也一直在扩展,其实面向对象只是一种编程范例,或者是一...阅读全文

简书 2020-10-24 17:32:50 用嘴写代码

Linux系统调用详解(实现机制分析)

系统调用概述计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)。在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。一般情况下应用程序通过应用编程接口API,而不是直接通过系统调用来编程。在Unix世界,最流行的API是基...阅读全文

简书 2020-10-24 16:32:46 linux大本营

Go | Go 使用 consul 做服务发现

系列文章目录@TOC前言前面一章讲了微服务的一些优点和缺点,那如何做到一、目标二、使用步骤1. 安装 consul我们可以直接使用官方提供的二进制文件来进行安装部署,其官网地址为 https://www.consul.io/downloads下载后为可执行文件,在我们开发试验过程中,可以直接使用 consul agent -dev 命令来启动一个单节点的 consul在启动的打印日志中可以看到 agent: Started HTTP server on 127.0.0.1:8500 (tcp),...阅读全文

Segmentfault 2020-10-25 14:32:36 双鬼带单

gitea和golang组合实现hook自动化部署代码

gitea和golang组合实现hook自动化部署代码背景目前git代码仓库develop分支的代码要经常更新到测试服务器,使用传统的FTP上传代码太费力,使用git pull手动拉取分支,也不够放心。现在使用git中的hook来进行自动化部署代码。思路git服务&hook配置git服务使用的是gitea。其中的hook配置如下ps:没用gitlab实在是因为它内存占用太大golang gin实现的web服务用到两个核心类库go-sh 执行Linux命令使用go-shgo-simplejson ...阅读全文

Segmentfault 2020-10-25 14:32:36 SmallForest

pprof接口隐藏/认证

pprof是golang提供的性能分析工具,这里就不过多介绍了。 使用方式很简单,导入pprof包即可 import _ "net/http/pprof" pprof.go源文件init函数会初始化性能监控接口 func init() { http.HandleFunc("/debug/pprof/", Index) http.HandleFunc("/debug/pprof/cmdline", Cmdline) http.HandleFunc("/debug/pprof/profile", P...阅读全文

简书 2020-10-24 10:32:39 写个代码容易么

LeetCode(3) 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例**输入:** "abcabcbb" **输出:** 3 **解释:** 因为无重复字符的最长子串是 "abc",所以其长度为 3。官方解法:func lengthOfLongestSubstring(s string) int { // 哈希集合,记录每个字符是否出现过 m := map[byte]int{} n := len(s) // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动 rk, ans...阅读全文

Segmentfault 2020-10-25 14:32:36 xbdyhh

天道酬勤,T9晋级答辩通过

2020年9月4日答辩结束,9月26日答辩结果公布:成功晋级!回想这一路的历程,颇有收获,这里把简要的过程记录如下,希望更多同学看了能有所收获:第一轮过ppt项目主要突出两点:业务价值 + 技术挑战;第二轮过ppt答辩ppt不要求全,但求精,把能充分证明自己能力的部分充分提现出来即可;重视一些运营类的数据,继续记住的数据指标用表哥列出来!第三轮过ppt晚上按照“提出问题-分析问题-解决问题-效果展示”的思路,重新整理了一版思维导图,思路清晰了不少!第四轮过ppt重点关注指标的方面:指标是多少?为...阅读全文

Go语言中文网 2020-10-24 09:28:52 leidachui

Golang标准库——text

scanner tabwriter template template/parse scanner scanner包提供对utf-8文本的token扫描服务。它会从一个io.Reader获取utf-8文本,通过对Scan方法的重复调用获取一个个token。为了兼容已有的工具,NUL字符不被接受。如果第一个字符是表示utf-8编码格式的BOM标记,会自动忽略该标记。 一般Scanner会跳过空白和Go注释,并会识别所有go语言规格的字面量。它可以定制为只识别这些字面量的一个子集,也可以识别不同的空...阅读全文

简书 2020-10-24 00:32:37 DevilRoshan

Golang 操作Excel文件

日常开发中会遇到处理Excel文件的相关操作,这里推荐一款应用比较广泛的操作Excel的开源工具Excelize。Excelize是一个用Go语言编写的库,提供了一组允许您写入和读取XLSX / XLSM / XLTM文件的功能。支持读写由Microsoft Excel™2007和更高版本生成的电子表格文档。通过高度兼容性支持复杂的组件,并提供了流式API,用于从工作表中生成或读取包含大量数据的数据。该库需要Go版本1.10或更高版本。可以使用go的内置文档工具查看完整的API文档,也可以在go...阅读全文

Segmentfault 2020-10-25 14:32:35 guyan0319

Linux的too many open files解析

Linux中如果一个进程打开文件或者socket连接过多,有没有及时处理和关闭掉文件或连接,当该进程打开文件的数量超过open files的数量时候,就会报too many open files的错误 Linux open files可以在进程级别限制 Linux 的open files 是在一个同一个进程里限制的,当然也有全局的限制(查看/proc/sys/fs/file-max文件),ulimit -a pid命令可以看到open files进程级别限制的大小。 如果当前open files...阅读全文

简书 2020-10-23 22:32:38 perfect6566