go panic時如何讓函數(shù)返回數(shù)據(jù)?
現(xiàn)在有這樣一個問題:某函數(shù)如果正常執(zhí)行,返回0,如果panic,則返回1,怎么搞呢?
package main
import "fmt"
func test() int {
defer func() {
if err := recover(); err != nil {
return 1
}
}()
var p *int
*p = 0
return 0
}
func main() {
fmt.Println("ret is", test())
for {}
}
這樣顯然不行,因?yàn)槟莻€return 1是針對匿名函數(shù)的, 而非test函數(shù)。
來看一個巧妙的方法:
package main
import "fmt"
func test() (a int) {
defer func() {
if err := recover(); err != nil {
a = 1
}
}()
var p *int
*p = 0
return 0
}
func main() {
fmt.Println("ret is", test())
for {}
}
OK.
不多說。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
以Golang為例詳解AST抽象語法樹的原理與實(shí)現(xiàn)
AST?使用樹狀結(jié)構(gòu)來表達(dá)編程語言的結(jié)構(gòu),樹中的每一個節(jié)點(diǎn)都表示源碼中的一個結(jié)構(gòu),本文將以GO語言為例,為大家介紹一下AST抽象語法樹的原理與實(shí)現(xiàn),希望對大家有所幫助2024-01-01
Go使用context控制協(xié)程取消的實(shí)戰(zhàn)案例
在并發(fā)編程中,合理地控制協(xié)程的生命周期是保證程序穩(wěn)定性和資源可控使用的關(guān)鍵,Go語言標(biāo)準(zhǔn)庫中的context包正是為了解決這一問題而生,它為我們提供了取消信號、超時控制、請求作用域的值傳遞等功能,本文將通過一個實(shí)際案例,演示如何使用context控制協(xié)程的取消2025-08-08
用Go+Vue.js快速搭建一個Web應(yīng)用(初級demo)
這篇文章主要介紹了用Go+Vue.js快速搭建一個Web應(yīng)用(初級demo),本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友參考下吧2017-11-11
關(guān)于golang?struct?中的?slice?無法原子賦值的問題
這篇文章主要介紹了為什么?golang?struct?中的?slice?無法原子賦值的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01
gorm golang 并發(fā)連接數(shù)據(jù)庫報錯的解決方法
今天小編就為大家分享一篇gorm golang 并發(fā)連接數(shù)據(jù)庫報錯的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
如何判斷Golang接口是否實(shí)現(xiàn)的操作
這篇文章主要介紹了如何判斷Golang接口是否實(shí)現(xiàn)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12

