“好运来好运来”为你分享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(“%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语言异常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