go panic时如何让函数返回数据?
现在有这样一个问题:某函数如果正常执行,返回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 {}
}
这样显然不行,因为那个return 1是针对匿名函数的, 而非test函数。
来看一个巧妙的方法:
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.
不多说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
使用go gin来操作cookie的讲解
准确地说, 这个标题是有问题的, go gin只能给浏览器返回操作cookie的指令, 真正执行cookie操作的是浏览器. 但广泛地来讲, 说go gin操作cookie, 也是可以的(间接操作) 来看go gin代码: package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default(); router.GET("/read_cookie", func(c
-
go代码实现买房贷款月供计算的方法
贷款金额:100元(先以100元为例,来对比下公积金贷款和商业贷款) 公积金贷款年利率: 3.25% 商业贷款的年利率: 4.90% 贷款期限:360个月(30年) 还款方式:等额本息 计算公式:之前推导过, 用等比数列搞起即可 go代码如下: package main import ( "fmt" "math" ) func get_pmt(f_interest_rate float64, term_number int, principal int) float
-
用go gin server来做文件上传服务
之前已经go get安装了gin, 现在来玩下用go gin server作图片上传服务, 代码目录如下: taoge:~/test_gin$ tree . |-- public |-- template | `-- select_file.html `-- test_gin_server.go 2 directories, 2 files taoge:~/test_gin$ test_gin_server.go内容: package main import ( "fmt" "
-
为什么Go语言把类型声明放在后面?
关于类型,官网上有一段仔细地介绍了一下函数指针的部分,现在的设计比起 C 的语法,清晰很多. 也就是说,类型放在后面是为了更加清晰易懂.Rob Pike 曾经在 Go 官方博客解释过这个问题(查看原文:Go's Declaration Syntax),简略翻译如下(水平有限翻译的不对的地方见谅): 引言 Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C家族语言不同.在这篇博文里,我们会进行一个比较,并做出解答. C 的语法 首先,先看看 C 的
-
go for range遍历二维数组的示例
go for range 遍历二维数组 var arry [2][3] int for index,_ := range arry { fmt.Print(index) } 运行结果: 0 1 没有遍历所有的6个元素. 二维数组 arry 可以理解为:拥有两个 一维数组元素 的一维数组,所以以上只是遍历了其的两个元素,index分别是0 1,value是两个 拥有三个int类型元素 的一维数组. var arry [2][3] int for index,value := range arr
-
go for range坑和闭包坑的分析
看程序: package main import ( "fmt" "time" ) func main() { str := []string{"I","like","Golang"} for _, v := range str{ v += "good" } for k, v := range str{ fmt.Println(k, v) } time.Sleep(1e9) } 结果:
-
strings命令分析浅谈Go和C++编译时的一点小区别
最近查一个bug, 用strings命令分析, 竟然出乎意料地没有结果, 非常纳闷. 最后根据这个线索查出了bug的根本原因. 1. 在C++中, 即使函数在代码层面没有被调用, 也会最终编译到二进制中, 用strings可以分析. #include <iostream> using namespace std; void fun() { printf("hello world\n"); // strings分析有结果 } int main() { return 0;
-
linux下搭建go环境的安装配置讲解
linux下搭建go环境很简单: 1.下载go1.2.1.linux-386.tar.gz,网上到处有类似包,并放到linux目录下. taogeqq@taogeqq-virtual-machine:~/myspace$ ls a.out go1.2.1.linux-386.tar.gz test.cpp test.go taogeqq@taogeqq-virtual-machine:~/myspace$ 2. 切换到root用户,在root下解压,解压即安装,多么绿色的软件啊: root@t
-
golang的空标识符理解
空白符(blank identifier) 空白符的产生可能是因为go不允许变量声明了但不使用.既然不想使用,何必声明变量呢,那就将变量用空白符代替,反正空白符就是用来抛弃的. 我们有时候看到这样的golang代码: import _ "net/http/pprof" 或 for _, c := range "11234" { log.Println(c) } 或 var _ io.Reader = (* XXX)(nil) //全局变量 或 var _ = Sui
-
在go中使用omitempty的代码实例
omitempty在go中的使用 直接上代码: package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr,omitempty"` } func main() { p1 := Person{ N
随机推荐
- MySQL解决SQL注入的另类方法详解
- JavaScript实现图片瀑布流和底部刷新
- Python的Bottle框架中获取制定cookie的教程
- 适合所有网站的rss和xml聚合功能asp代码
- Sql注入工具_动力节点Java学院整理
- jQuery基于当前元素进行下一步的遍历
- Python实现爬取知乎神回复简单爬虫代码分享
- asp.net中CSharpThinking扩展方法分析
- ubuntu系统下 python链接mysql数据库的方法
- Bootstrap 表单验证formValidation 实现远程验证功能
- ASP.NET MVC Bundles 用法和说明(打包javascript和css)
- asp.net AjaxControlToolKit--TabContainer控件的介绍
- 简单的cookie计数器实现源码
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- Vue动态组件实例解析
- Android activity和view判断滑动
- oracle 重置序列从指定数字开始的方法详解
- JavaScript建立一个语法高亮输入框实现思路
- js快速排序的实现代码
- 注入过程中遇到DB_OWNER的想法(图)
