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

时间:2022-04-30 00:57:33 其他范文 收藏本文 下载本文

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

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(“%sn”, 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(“%sn”, 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语言程序设计有所帮助,

高二人教版英语作文

高二上册英语词汇表

高二英语Unit 8词汇学习

go语言返回199之间随机数的方法

人教版 高二英语Unit4知识

Go语言对字符串进行SHA1哈希运算的方法

Unit 8习语及语言点总结(人教版高一英语上册教案教学设计)

初中英语作文七十单词

外研新标准book1 module 5知识精讲

时间地点介词有哪些相关介词

go语言异常panic和恢复recover用法实例
《go语言异常panic和恢复recover用法实例.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【go语言异常panic和恢复recover用法实例(推荐7篇)】相关文章:

go语言实现的memcache协议服务的方法2022-05-07

Unit 16 说课稿(人教版高二英语下册说课)2022-09-02

高考复习--人教高二Unit1--unit3(人教版高二英语上册教案教学设计)2024-01-30

新闻英语标题翻译:时态2023-11-26

高一年级英语作文:Useful computer2023-10-20

shell问答16:批量修改文件名后缀Unix系统2022-11-25

一个新混沌系统的控制与同步2023-03-08

高二英语Unit2 news media 知识点总复习教案(人教版高二英语教案教学设计)2023-11-02

关于地震的英语作文2022-04-30

panic的第三人称单数和例句2022-09-04

点击下载本文文档