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

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

深圳创业团队诚聘golang工程师,薪资均可谈!!

岗位要求: 1、熟悉linux命令基础操作; 2、有过相关服务器运维经验,含接口编写、数据库设计; 3、了解C/S架构; 4、熟悉Golang,有大型项目开发和部署经验; 5、熟练网络编程,对Tcp数据包有所了解; 6、使用过开发过一个或以上比较完善的服务端应用项目优先考虑; 公司是做互联网医疗软件开发行业的,目前所有的技术人员都向CTO汇报工作,内部氛围轻松和谐,并鼓励学习新技术,一起讨论一起解决问题~ 福利的话,超多零食,平时也会组织一些活动出去吃吃喝喝,上下班不打卡,国家法定节假日都是照放的~ 工资方面,老板自己也开口了,主要看面试后的评价,不会低于市场工资水平,如果是CTO非常认同的大神,那工资都好谈~~ 如果有兴趣的小伙伴,可以发送简历到我的邮箱,邮箱是...阅读全文

《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 这样需要锁的多线程程序中的单线程程序是简单有效的. 一般来说, 这可能更多有效地使用一组每个线程缓存来分配内存, 而在这一点上你已经失去了凹凸分配器的优势. 所以我会断言, 一般来说有很多注意事项导致...阅读全文

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

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

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

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

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

遇到一个没办法解决的问题,求大佬解答

系统是 windows 10 任意目录输入:go version 显示 ![image.png](https://static.studygolang.com/181203/1bd5bc1de438c61897044fc75686a5eb.png) 任意目录输入 go env 显示 ![image.png](https://static.studygolang.com/181203/e5adcb370d9e2944274b7f521610f83f.png) 编写代码 test.go ![image.png](https://static.studygolang.com/181203/dcda8fb7d00ba5c4aa7e3047bc35ea...阅读全文

大数据学习之Hbase shell的基本操作

HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况。安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeeper,使用start-hbase.sh命令开启hbase服务,最后在shell中执行hbase shell就可以进入命令行界面 Habse shell的help对语法的介绍很全,hbase shell 的操作分为 10类,j本文只介绍前4类常用的,分别是:gerneral,ddl,namespace,dml 1. Gerneral status:查询当前服务器状态。 Version:查看当前版本 Whoami:查询当前hbase用户 Table_help:表的...阅读全文

大数据学习之Hbase shell的基本操作

HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况。安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeeper,使用start-hbase.sh命令开启hbase服务,最后在shell中执行hbase shell就可以进入命令行界面 Habse shell的help对语法的介绍很全,hbase shell 的操作分为 10类,j本文只介绍前4类常用的,分别是:gerneral,ddl,namespace,dml 1. Gerneral status:查询当前服务器状态。 Version:查看当前版本 Whoami:查询当前hbase用户 Table_help:表的...阅读全文

HTML5培训学习中会遇到哪些问题

  现在学习HTML5开发技术的小伙伴应该有很多吧,不论是参加HTML5培训还是自学的小伙伴都不在少数,我最近也在学习HTML5,现在把我的学习经验和学习过程中遇到的问题分享给大家,希望和朋友们一块探讨共同进步。   关于HTML5的学习,首先给那些还在犹豫要不要参加HTML5培训的朋友一些建议,那就是想要学习HTML5的话最好还是参加HTML5培训比较好,因为自学有很大的弊端并且需要有极大的耐心和学习能力,但是参加HTML5培训就不同了,不仅有老师教导,还有同学们大家共同交流,学习的速度就更快了。   现代人都会选择网络平台来开展各种娱乐体验,比如在浏览各种网站平台的时候,多元化直接影响着用户的体验,所以在进行网站开发建设的时候需要HTML5的应用,那么什么是HTML5呢?HT...阅读全文