刀豆文库小编猜你可能喜欢“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语言程序设计有所帮助,
刀豆文库小编为你整合推荐4篇go的短语和用法,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
go.vi. 走,离开,去做,进行vt. 变得,发出…声音,成为,处于…状态n. 轮到的顺序,精力,干劲,尝试变形:过去式: went; 现在分词:going; 过去分词:gone.扩展资料go用法:go可以用作动词:g......
to go是动词不定式短语,可以视为名词,作主语或者宾语皆可。to:prep. 到; 向; 往(某方向或某处); 位于…方向; 到达(某处)。go:v. 去; 走; (尤指与某人)去(某处或出席某项活动);......
意思不同1、go意思:去;走;(尤指与某人)去(某处或出席某项活动);移动,旅行,行走(指方式或距离)。2、o to意思:去…;费工夫;花钱;求助于;求教于。扩展资料用法不同1、go用法:go的基本......
go和walk的区别是:go是指走路,相对walk来说比较急,但多用于去做什么事。walk是指散步,相对go来说比较悠闲,多用于休息时。扩展资料用法是:go的基本意思是“离开原来的地方向别处挪......