go语言异常panic和恢复recover用法实例_recover为啥恢复不了

其他范文 时间:2024-06-17 08:18:03 收藏本文下载本文
【www.daodoc.com - 其他范文】

刀豆文库小编猜你可能喜欢“recover为啥恢复不了”。

“好运来好运来”为你分享7篇“go语言异常panic和恢复recover用法实例”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。

篇1:go语言异常panic和恢复recover用法实例

作者:依山带水 字体:[增加 减小] 类型:

go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理

在一个主进程,多个go程处理逻辑的结构中,这个很重要,如果不用recover捕获panic异常,会导致整个进程出错中断

代码如下:

package main

import \“fmt\”

func main {

defer func() {    //必须要先声明defer,否则不能捕获到panic异常

fmt.Println(\“c\”)

if err := recover(); err != nil {

fmt.Println(err)   //这里的err其实就是panic传入的内容,55

}

fmt.Println(\“d\”)

}()

f()

}

func f() {

fmt.Println(\“a\”)

panic(55)

fmt.Println(\“b\”)

fmt.Println(\“f\”)

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇2:GO语言异常处理机制panic和recover分析

这篇文章主要介绍了GO语言异常处理机制panic和recover,分析了捕获运行时发生错误的方法,是非常实用的技巧,需要的朋友可以参考下

Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部。一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。

golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 defer 语句,再报告异常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函数,则会捕获错误信息,使该错误信息终止报告。

示例:

代码如下:

package main

import (

\“log\”

\“strconv\”

)

//捕获因未知输入导致的程序异常

func catch(nums ...int) int {

defer func() {

if r := recover(); r != nil {

log.Println(\“[E]\”, r)

}

}()

return nums[1] * nums[2] * nums[3] //index out of range

}

//主动抛出 panic,不推荐使用,可能会导致性能问题

func toFloat64(num string) (float64, error) {

defer func() {

if r := recover(); r != nil {

log.Println(\“[W]\”, r)

}

}()

if num == \“\” {

panic(\“param is null\”) //主动抛出 panic

}

return strconv.ParseFloat(num, 10)

}

func main() {

catch(2, 8)

toFloat64(\“\”)

}

输出如下:

/11/01 22:54:23 [E] runtime error: index out of range

2014/11/01 22:54:23 [W] param is null

希望本文所述对大家的GO语言程序设计有所帮助,

篇3:go语言template用法实例

作者:不吃皮蛋 字体:[增加 减小] 类型:

golang的template包很好用,做一些复杂的文本格式生成太有帮助了,生成网页也是很不错的,使用起来非常方便

代码如下:

package main

import (

\“fmt\”

\“os\”

\“text/template\”

)

type Latlng struct {

Lat float32

Lng float32

}

func (latlng Latlng) String string {

return fmt.Sprintf(\“%g/%g\”, latlng.Lat, latlng.Lng)

}

func main() {

data := []template.FuncMap{}

data = append(data, template.FuncMap{\“name\”:\“dotcoo1\”, \“url\”:\“http://www.jb51.net/\”, \“latlng\”:Latlng{24.1, 135.1}})

data = append(data, template.FuncMap{\“name\”:\“dotcoo2\”, \“url\”:\“http://www.jb51.net/\”, \“latlng\”:Latlng{24.2, 135.2}})

data = append(data, template.FuncMap{\“name\”:\“dotcoo2\”, \“url\”:\“http://www.jb51.net/\”, \“latlng\”:Latlng{24.3, 135.3}})

datatpl := `{{range .}}{{template \“user\” .}}{{end}}`

usertpl := `{{define \“user\”}}name:{{.name}}, url:{{.url}}, latlng:{{.latlng}} lat:{{.latlng.Lat}} lng:{{.latlng.Lng}}

{{end}}`

tpl, err := template.New(\“data\”).Parse(datatpl)

if err != nil {

panic(err)

}

_, err = tpl.Parse(usertpl)

if err != nil {

panic(err)

}

err = tpl.Execute(os.Stdout, data)

if err != nil {

panic(err)

}

println()

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇4:go语言里包的用法实例

作者:不是JS 字体:[增加 减小] 类型:转载

每个 Go 程序都是由包组成的。

程序运行的入口是包 main。

这个程序使用并导入了包 \“fmt\” 和 \“math\”,

按照惯例,包名与导入路径的最后一个目录一致。

代码如下:

package main

import (

\“fmt\”

\“math\”

)

func main() {

fmt.Println(\“Happy\”, math.Pi, \“Day\”)

}

希望本文所述对大家的Go语言程序设计有所帮助。

篇5:go语言base64用法实例

作者:不吃皮蛋 字体:[增加 减小] 类型:

这里展示golang base64 的一个小例子,代码如下:

代码如下:

package main

import (

\“fmt\”

\“encoding/base64\”

)

func main {

b64 := base64.NewEncoding(\“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\”)

println(b64.EncodeToString([]byte(\“哈哈\”)))

}

发现了一个更好的办法:

代码如下:

package main

import (

\“fmt\”

\“encoding/base64\”

)

func main() {

s := []byte(\“http://golang.org/pkg/encoding/base64/#variables\”)

fmt.Printf(\“%s\\n\”, base64.StdEncoding.EncodeToString(s))

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇6:Go语言MD5加密用法实例

作者:work24 字体:[增加 减小] 类型:转载

这篇文章主要介绍了Go语言MD5加密用法,实例分析了Go语言MD5加密的使用技巧,需要的朋友可以参考下

本文实例讲述了Go语言MD5加密用法,分享给大家供大家参考。具体实现方法如下:

代码如下:

import (

\“crypto/md5\”

\“encoding/hex\”

)

func main() {

h := md5.New()

h.Write([]byte(\“sharejs.com\”)) // 需要加密的字符串为 sharejs.com

fmt.Printf(\“%s\\n\”, hex.EncodeToString(h.Sum(nil))) // 输出加密结果

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇7:GO语言标准错误处理机制error用法实例

在 Golang 中,错误处理机制一般是函数返回时使用的,是对外的接口,而异常处理机制 panic-recover 一般用在函数内部。

error 类型介绍

error 类型实际上是抽象了 Error() 方法的 error 接口,Golang 使用该接口进行标准的错误处理。

代码如下:

type error interface {

Error() string

}

一般情况下,如果函数需要返回错误,就将 error 作为多个返回值中的最后一个(但这并非是强制要求)。参考模型:

代码如下:

func Foo(param int) (n int, err error) {

// ...

}

if n, err := Foo(0); err != nil {

// 错误处理

}

这就是 error 的使用方法,与其他语言的异常相比,Golang 的方法相对更加容易、直观。

代码1:经典使用方法

代码如下:

package main

import (

\“errors\”

\“fmt\”

)

func requireDual(n int) (int, error) {

if n&1 == 1 {

return -1, errors.New(\“您输入不是双数\”) //生成一个简单的 error 类型

}

return n, nil

}

func main() {

if result, err := requireDual(101); err != nil {

fmt.Println(\“错误:\”, err)

} else {

fmt.Println(\“结果:\”, result)

}

}

输出结果:

错误: 您输入不是双数

你有没有觉得 Golang 的这种错误的处理机制非常的简洁啊,呵呵!

代码2:扩充下上面的代码,带自定义参数的错误输出

代码如下:

package main

import (

\“fmt\”

)

type dualError struct {

Num    int

problem string

}

func (e dualError) Error() string {

return fmt.Sprintf(\“参数不正确,因为\\\”%d\\\“不是双数\”, e.Num)

}

func requireDual(n int) (int, error) {

if n&1 == 1 {

return -1, dualError{Num: n}

}

return n, nil

}

func main() {

if result, err := requireDual(101); err != nil {

fmt.Println(\“错误:\”, err)

} else {

fmt.Println(\“结果:\”, result)

}

}

输出结果

错误: 参数不正确,因为\“101\”不是双数

希望本文所述对大家的GO语言程序设计有所帮助,

go的短语和用法

刀豆文库小编为你整合推荐4篇go的短语和用法,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......

go的短语和用法

go.vi. 走,离开,去做,进行vt. 变得,发出…声音,成为,处于…状态n. 轮到的顺序,精力,干劲,尝试变形:过去式: went; 现在分词:going; 过去分词:gone.扩展资料go用法:go可以用作动词:g......

to go的用法和短语

to go是动词不定式短语,可以视为名词,作主语或者宾语皆可。to:prep. 到; 向; 往(某方向或某处); 位于…方向; 到达(某处)。go:v. 去; 走; (尤指与某人)去(某处或出席某项活动);......

go和go to的区别和用法

意思不同1、go意思:去;走;(尤指与某人)去(某处或出席某项活动);移动,旅行,行走(指方式或距离)。2、o to意思:去…;费工夫;花钱;求助于;求教于。扩展资料用法不同1、go用法:go的基本......

go和walk的区别和用法

go和walk的区别是:go是指走路,相对walk来说比较急,但多用于去做什么事。walk是指散步,相对go来说比较悠闲,多用于休息时。扩展资料用法是:go的基本意思是“离开原来的地方向别处挪......

下载go语言异常panic和恢复recover用法实例word格式文档
下载go语言异常panic和恢复recover用法实例.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文