文档章节

Go函数——多返回值和错误信息的处理

秋风醉了
 秋风醉了
发布于 2016/07/08 18:56
字数 440
阅读 130
收藏 0

Go函数——多返回值和错误信息的处理

多返回值

在Go中,一个函数可以返回多个值。我们已经在之前例子中看到,许多标准库中的函数返回2个值,一个是期望得到的返回值,另一个是函数出错时的错误信息。下面的例子会展示如何编写多返回值的函数。 下面是一个简单的例子,

package main

import (
	"fmt"
)

func main() {
	a, b := swap("world", "hello") //接收两个返回值
	fmt.Println(a, b)
}

// 两个返回值的函数
func swap(x, y string) (string, string) {
	return y, x
}

还可以为返回值定义一个名字

package main

import (
	"fmt"
)

func main() {
	a, b := swap("world", "hello") //接收两个返回值
	fmt.Println(a, b)

	fmt.Println(split(17))
}

// 两个返回值的函数
func swap(x, y string) (string, string) {
	return y, x
}

// 返回值分别为 x,y
// 同时return 没有指定返回的值,那么会将当前的x,y值返回
func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

多返回值中包含error

返回多个返回值,并且包含error错误信息,从而完成了异常信息的传递,go代码示例如下,

package main

import (
	"errors"
	"fmt"
)

func main() {
	/* 创建切片,不指定元素个数*/
	numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}

	if res, err := max(numbers); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(res)
	}

	slices := make([]int, 0, 0)

	if res, err := max(slices); err != nil {
		fmt.Println(res)
	} else {
		fmt.Println(res)
	}

}
func max(slice []int) (int, error) {

	if len(slice) == 0 || slice == nil {
		return -1, errors.New("数列为空") //生成一个简单的 error 类型
	}

	if len(slice) == 1 {
		return slice[0], nil
	} else if result, _ := max(slice[1:]); slice[0] > result {
		return slice[0], nil
	} else {
		return max(slice[1:])
	}
}

========END========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 239
博文 572
码字总数 416654
作品 0
朝阳
程序员
私信 提问
socket套接字选项列表

From:http://blog.chinaunix.net/u1/38994/showart.php?id=726708 Unix网络API 索引: 1.字节序函数 2.字节操作函数 3.地址转换函数 4.readn、writen和readline 5.测试描述符类型 6.socket...

AlphaJay
2010/05/17
2.7K
0
Ajax 高级教程之 AJAX状态值与状态码

1- AJAX状态值与状态码区别 AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤。如:正在发送,正在响应等,由AJAX对象与服务器交互时...

残风vs逝梦
2014/07/25
0
0
Go基础编程:异常处理(error接口、panic、recover)

1 error接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: Go语言的标准库代码包errors为用户提供如下方法: 另一个可以生成error...

tennysonsky
01/01
0
0
Golang 异常处理机制——defer, error, panic, recover

一、前言 在实际的项目中,对于异常的最佳实践很多,在使用不同的语言开发不同类型的程序时,有不同的建议。Google C++ Style 中提到 Google 内部的 C++ 代码中不使用异常,社区也有很多关于...

吃一堑消化不良
2016/12/01
137
0
史上最简单的 MySQL 教程(四十四)「存储过程」

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋、,纠错。 存储过程 存储过程简称过程,,是一种用来处理数据(增删改)的方式。简单点,我们也可以将...

qq_35246620
02/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

case when then

case具有两种格式。简单case函数和case搜索函数。 --简单case函数case sex when '1' then '男' when '2' then '女’ else '其他' end--case搜索函数case when sex = '1' the...

architect刘源源
11分钟前
0
0
Kubernetes探秘—kubelet的配置参数

kubelet是Kubernetes中的核心组件,需要在每一个节点安装,也是kubernetes集群启动的第一个服务。kubelet的参数存放在多个目录,修改时如果不完整就会导致各种错误,下面我们kubelet的参数存...

openthings
14分钟前
0
0
如何通过 MySQL 的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和大家一起分享学习下如何通过 MySQL 的二...

吴伟祥
23分钟前
1
0
org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may

org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may 2017年07月21日 14:52:10 子木HAPPY阳VIP 阅读数:14134 标签: tomcatnginx 更多......

linjin200
25分钟前
1
0
线下工坊|Blockchain Coding Day:零基础教你开发DAPP(北京)

我们的目标是通过编程学习让你更了解区块链技术。这将对区块链开发初学者一次很好的体验。这里需要强调一下,编程零基础也能学会。 我们将以小组的形式,由教练带领学员完成DAPP开发。每位学...

HiBlock
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部