Go语言中文网 为您找到相关结果 19

Go语言中异常处理painc()和recover()的用法

Go语言中异常处理painc()和recover()的用法 1、Painc用法是:用于抛出错误。Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。 2、代码: package main import "fmt" func main() { fmt.Printf("hello world my name is %s, I'm %d\r\n", "songxingzhu", 26) defer func() { ...阅读全文

博文 2016-03-09 10:00:01 songxingzhu

[分享]Gopher China 上海大会上的PPT

Gopher China 上海大会上的PPT [GO语言并发编程实践 by 周洋@360手机助手](http://airjd.com/view/i93qyhcy000h5ri) [Go语言在NFV场景下的应用研究 by 汪洋@华为](http://airjd.com/view/i93rjkj300009rd) [Go在猎豹移动的应用 by 毛剑](http://airjd.com/view/i93y6ubj000f9mf) [Golang与高性能DSP竞价系统](http://airjd.com/view/i93ybt65000g7pe) [用golang写一个操作系统](http://airjd.com/view/i93y5mbb000i1ga) [P2...阅读全文

Golang os/user 用户模块

os/user 用户模块 导入语法: import "os/user" 模块概述 os/user 模块的主要作用是通过用户名或者 id 从而获取其相关属性。 User 结构体 type User struct { Uid string Gid string Username string Name string HomeDir string } User 代表一个用户账户: Uid :用户的 ID Gid :用户所属组的 ID,如果属于多个组,那么此 ID 为主组的 ID Username :用户名 Name :属组名称,如果属于多个组,那么此名称为主组的名称 HomeDir :用户的宿主目录 User 结构体的主要方法 Current func Current() (*User, erro...阅读全文

博文 2016-03-04 08:00:01 mydevops

Go语言select的内存分配情况

最近看了Go runtime中关于select的实现(select in Go’s runtime),发现select语句位于for循环之内执行的时候,每一遍循环都需要在底层runtime中经历malloc对象到free对象的过程,我认为这个频繁的内存分配和释放的代价并不小,至少内存不是处于一种稳定的状态。因此,我实际的测试一把使用select来操作channel和不使用select操作channel两种情况下的内存情况。 测试过程都是运行程序3分钟,每一次循环sleep 1秒钟,每10秒钟采集一下内存使用情况的数据。为了更直观的感受,我使用goplot工具把采集到的内存数据绘制成了图表。 使用select 测试代码:https://gist.github.com/skoo87/672715...阅读全文

golang 程序的异常退出

同事反馈了一个问题,一个微服务异常退出。查了许久没有发现一个是一个协程异常导致的整个进程退出了。程序的异常情况其实基本上是可控的,找到异常原因,修复问题上线是可以的。但是这里体现了两个知识点:1、golang的一个协程异常,如果没有捕获,回导致整个进程退出。这里就不举例子说明了,自己可以写个很简单的demo,通过go func() {}里面使用panic产生恐慌试验下。2、关于defer、panic、recover的使用理解golang不支持java语言中的try...catch...finally这种异常,因为...此处忽略了一千字😄defer的原意是推迟、延期。它的思想类似与C++的析构函数,不过go语言中的析构的不是对象,而是函数,defer就是用来添加函数结束时执行的语句。注意这里强...阅读全文

博文 2018-09-13 14:35:03 GoSnail

《Go语言程序设计》第4章练习

4.1 写一程序求y值(x值由键盘输入)。 y = (sinx+cosx)/2, x>=0 y = (sinx-cosx)/2, x<0 4.2 输入一个字符,判断它如果是小写字母输出其对应的大写字母;如果是大写字母输出其对应的小写字母;如果是数字输出数字本身;如果是空格输出“SPACE”;如果不是上述情况输出“Other”。 4.3 有三个数a、b、c,由键盘输入,输出其中最大的数。 4.4 输入一个数,判断它能否被3或者5整除,如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。 4.5 读入1-7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、Tuesday等,使用switch语句实现...阅读全文

Selector(意译)

【EBNF定义】Selector = "." identifier 【EBNF解释】就是说一个'.'加上一个标识符就是一个 Selector 。 【翻译】个人觉得不能翻译成选择器,应该翻译成一次选择,因为这是一个选择的过程,见后文。 【含义】 x.f 这个选择表达式中, f 就称之为 Selector ,就是一次选择,这次选择可能选择了类型为T的一个结构体中的一个 field ,也有可能选择了这个类型相关联的 method 。更重要的是,还有可能是选择了包含在类型 T 中的匿名 field中的field或者method。 【规则】对于x.f这个选择表达式: 1.假设 x 的类型为 T 或者 *T( T 的 underlying typ...阅读全文

图解Golang的垃圾回收(GC)算法

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier 经典的GC算法有三种: 引用计数(reference counting)、 标记-清扫(mark&sweep)、 复制收集(CopyandCollection)。 Golang的GC算法主要是基于 标记-清扫(markandsweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复制收...阅读全文

博文 2019-04-13 01:34:39 豆瓣奶茶

Inside Qt Series (一):Let’s go, Starting From the QObject

QObject 这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect(…) 方法连接起来,并可以使用 disconnect(…) 方法来断开这种连接,你还可以通过调用 blockSignal(…) 这个方法来临时的阻塞信号, QObject 把它们自己组织在对象树中。当你创建一个 QObject 并使用其它对象作为父对象时,这个对象会自动添加到父对象的 children() list 中。父对象拥有这个对象,比如,它将在它的析构函数中自动删除它所有的 child 对象。你可以通过 findChild() 或者 fin...阅读全文

为什么 Go 还没实现分代和紧凑 GC

本文译自 Google 论坛(golang-nuts)版权@归原文所有. 有人在论坛里面问: 为什么 Golang 垃圾回收器不实现分代和紧凑 gc ? Ian Lance Taylor 的回复: 这已经在过去讨论过了. 忽略细节, 紧凑(compacting) GC 的基本优点是: 避免碎片, 以及; 允许使用简单而有效的凹凸分配器(bump allocator). 但是, 现代的内存分配算法, 象 Go 运行时使用的基于 tcmalloc 的方案基本上没有碎片问题. 而凹凸分配器对于 Go 这样需要锁的多线程程序中的单线程程序是简单有效的. 一般来说, 这可能更多有效地使用一组每个线程缓存来分配内存, 而在这一点上你已经失去了凹凸分配器的优势. 所以我会断言, 一般来说有很多注意事项导致...阅读全文

深圳年薪55万,西安20万,你会选择哪个城市?

最近联系上深圳某知名大厂的一哥们,是一位高级开发工程师,收入也不错,年薪55万。刚好深圳有一家不错的公司需要他这样的技术人才,便与他聊起来,但被他拒绝了,原因是他想回西安发展,不想待在深圳了。 我很好奇他为什么会做这样的选择,于是便开始问他。他的答案很简单,深圳房价太高了,而且在深圳想找到年薪100万以上的工作,也不是那么容易的事。这样想也不是没道理,于是我也帮他了解一下西安的就业行情,他如果回西安的话,薪资起码缩水60%。于是我劝他慎重考虑,但是他很坚定,说没什么好考虑的,留在一线城市也无非是给别人搬砖,并说他现在这点薪资也是靠拼命加班才有的,几乎每天都是十点钟以后下班,KPI还很重,总的来说就是很苦逼!所以他觉得在非一线城市,还能过得轻松一些,即使拿的钱比现在少很多。聊到这里,我也开始理...阅读全文

博文 2018-09-22 21:01:53 kelasong

golang进程如何打印goroutine stack信息

非常遗憾的是,目前没有类似pstack/jstack的工具可以使用。 网上有一些办法,需要在源程序里面预先添加代码,例如debug.PrintStack(),然后外面触发信号,打印stack内容;可是现实情况下运行程序并没有这些专门为调试而设置的代码。 例如正常运行的程序,线上程序,突然死锁了,如何查看各个goroutine都在干什么呢? 目前我了解的唯一办法就是给进程发送SIGQUIT信号: kill -SIGQUIT go进程在收到SIGQUIT信号后,会往标准错误(stderr)打印出所有goroutine的stack信息。 但是遗憾的是,此时go进程也就退出了。 如果既想打印出所有gorouotine的stack,又不杀掉进程本身,好像没有办法唉。 另外pstack对于g...阅读全文

博文 2018-07-16 16:34:57 CodeGeek

golang panic recover

Go语言中异常处理painc()和recover()的用法 1、Painc用法是:用于抛出错误。Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。 2、代码: package main import "fmt" func main() { fmt.Printf("hello world my name is %s, I'm %d\r\n", "songxingzhu", 26) defer func() { ...阅读全文

博文 2017-07-09 09:03:49 杰克慢

Go ARM64 Map优化小记

Go内置了map类型,而其中重要的哈希算法是一个cityhash的变种。 同时,为了避免哈希冲突攻击(collision attack)和加速哈希计算速度,Keith Randall于Go1.0中就添加了x86_64支持的有硬件加速的AESHASH算法。 我搜遍了互联网,惊讶地发现,这个算法仅仅在Go里面有实现,这思路真是绝了。 这就被我这个四处搜索ARM64 Go runtime待优化点的人找到了:ARM64也支持AESHASH的硬件加速指令,但是Go并没有用上。 我嘴角又微微地一笑,满心欢喜准备加代码。可我并不知道,这看似平静的海面下不知道藏着什么妖怪…...阅读全文

博文 2018-03-16 17:15:38 zhuo/blog

golang pprof

基本路径:/debug/pprof/ 支持的分析类型: cpu(CPU Profiling): HOST/debug/pprof/block,查看导致阻塞同步的堆栈跟踪 goroutine:HOST/debug/pprof/heap,查看活动对象的内存分配情况 mutex(Mutex Profiling):HOST/debug/pprof/threadcreate,查看创建新OS线程的堆栈跟踪 启动 PProf 可视化界面 方法一: go tool pprof -http=:8080 cpu.prof 方法二: go tool pprof cpu.prof we...阅读全文

博文 2019-03-22 14:35:13 凯文不上班

你不知道的go channel

最近在开发过程当中遇到了几个goroutine通信的问题,我觉得这几个问题非常具有代表性,因此拿出来和大家分享一下。 检查channel是否关闭 开发过程当中有遇到这样的一种情况,需要检查channel是否关闭,如果关闭则不进行相应操作,否则会panic等现象。在golang的select语法当中,default分支可以解决上述问题,请看如下例子: closechan := make(chan int,0) dchan := make(chan int,0) select{ case <- closechan: fmt.Println("channel already closed.") return default: fmt.Println("channel not closed, do ...阅读全文

Learn Golang in Days - Day 15-Go错误处理

Learn Golang in Days - Day 15-Go错误处理 简介 Go语言通过内置错误接口提供了简单的错误处理机制 error类型是一个接口类型,它的定义如下 type error interface { Error() string } 例子 package main import "fmt" import "errors" func main() { //var f = 3.4 //正确 var f float32 = -2.0 var n, err = sqrt(f) if err != nil { fmt.Printf("error, %s\n", err) return } fmt.Printf("sqrt(%f) = %f\n", f, n) } func sqrt...阅读全文

博文 2019-02-08 15:34:42 笑吧小鸟

golang 注释命令

protoc //go:generate protoc -I ../routeguide --go_out=plugins=grpc:../routeguide ../routeguide/route_guide.proto 压测 -bench 指定方法名字后缀,-bench="." 测试 全部方法(Benchmark_Rar:-bench=Rar) -benchtime 自定义测试时间 -benchmem 参数以显示内存分配情况 //go:generate go test main_test.go -v -bench=Rar -benchtime=60s -benchme...阅读全文

博文 2019-04-16 09:34:42 Feng_Sir

阿里云应用上边缘云解决方案助力互联网All in Cloud

九月末的杭州因为一场云栖大会变得格外火热。9月25日,吸引全球目光的2019杭州云栖大会如期开幕。20000平米的展区集结数百家企业,为数万名开发者带来了一场前沿科技的饕餮盛宴。如同往年一样,位于C馆的阿里巴巴空间站无疑是最受瞩目的展区。展区中,阿里云飞天、基础设施服务、大数据、AIoT、边缘计算、安全等核心技术悉数亮相,同时展示了了传统企业上云、互联网企业上云、一云多端行业场景等多项垂直解决方案。其中,阿里云应用上边缘云解决方案作为互联网企业上云的助推器,在现场展示。​应用上边缘云解决方案,实际上是借助于阿里云广域覆盖的边缘计算节点提供的计算、存储、GPU等基础设施,提供秒级批量下发、全国覆盖、安全稳定的边缘算力,帮助企业应用快速构建边缘云上业务架构,解决企业的本地化、弹性扩容、低成本、低...阅读全文