文档章节

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

秋风醉了
 秋风醉了
发布于 2016/07/08 18:56
字数 440
阅读 115
收藏 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========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 236
博文 577
码字总数 418437
作品 0
朝阳
程序员
Golang 学习笔记(07)—— 错误及异常处理

本文为转载,原文:Golang 学习笔记(07)—— 错误及异常处理 Golang 基础知识 错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中 ;而异常指的是...

ChainZhang
2017/12/28
0
0
关于Linux下的system调用

曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行...

有些服务器
2015/07/16
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
Ajax 高级教程之 AJAX状态值与状态码

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

残风vs逝梦
2014/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
8分钟前
0
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
15分钟前
0
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
16分钟前
0
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
17分钟前
0
0
20180925 df与du命令、fdisk磁盘分区

df 命令 disk filesystem的缩写,查看已挂载磁盘的总容量、使用容量、剩余容量信息。 [root@centos01 ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda3 27...

野雪球
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部