文档章节

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

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

© 著作权归作者所有

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

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

ChainZhang
2017/12/28
0
0
Ajax 高级教程之 AJAX状态值与状态码

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

残风vs逝梦
2014/07/25
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
史上最简单的 MySQL 教程(四十四)「存储过程」

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

qq_35246620
02/28
0
0
lua与redis结合

一,Redis和Lua结合 1:redis.call:在脚本中调用Redis命令,遇到错误会直接返回 2:redis.pcall:在脚本中调用Redis命令,遇到错误会记录错误并继续执行 3:Lua数据类型和Redis返回值类型对...

daydayup08
2016/04/27
34
0
[译] 一个简单的 ES6 Promise 指南

原文地址:A Simple Guide to ES6 Promises 原文作者:Brandon Morelli 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:熟鱼 校对者:kezhenxu94 zhmhhu 一个简单的 ...

熟鱼
05/30
0
0
Golang 异常处理机制——defer, error, panic, recover

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

吃一堑消化不良
2016/12/01
137
0
Go 语言的错误处理机制引发争议

最近,有关Go语言的错误处理机制在社区中展开了讨论,有人认为冗长重复的错误处理格式像是回到了上世纪七十年代,而Go语言的开发者给予了反驳。 Go语言的错误处理机制可以从支持函数多返回值...

红薯
2012/12/04
6.7K
32
Unix/Linux程序设计之getopt函数浅谈

Linux中getopt函数用法: 1、函数作用: getop函数用于解析命令行参数的以'-'或者‘--'开头的参数选项,除去'-'或者'--'选项元素 如果被重复调用,则它将会依次返回每个选项元素中选项字符。...

捕风的xiao_k
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决dokuwiki创建中文词条文件乱码问题

若直接创建中文词条,打开本地文件夹\dokuwiki\data\pages你会发现,中文字段显示的是URL乱码,需要改一下utf8格式,方法如下:(linux系统亲测有效) 打开 .dokuwiki\conf\local.php 添加一行...

Rhymo-Wu
7分钟前
0
0
设置圆角长条progressbar背景色

1、首先在Drawable下面新建一个xml文件,将这段代码复制进去 <?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-......

王先森oO
7分钟前
0
0
Java语言学习(九):异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。常见的三种异常类型有: 检查性异常,如打开一个不存在的文件 运行时异常,如数组越界 错误,如栈溢出 ...

海岸线的曙光
11分钟前
0
0
深入分析golang多值返回以及闭包的实现

一、前言 golang有很多新颖的特性,不知道大家的使用的时候,有没想过,这些特性是如何实现的?当然你可能会说,不了解这些特性好像也不影响自己使用golang,你说的也有道理,但是,多了解底...

万建宁
11分钟前
0
0
img与background-image之间的区别

1.img <img src="图片来源" alt="图片无法显示时显示图片说明性文字" style="设置样式属性" /> img标签虽然不是块状元素,但是可以设置宽高,占位, img设置width后height会自适应匹配,如果...

爱喝水的小熊
13分钟前
0
0
Swift - 添加提示音

func createSound() { //建立的SystemSoundID对象 var soundID:SystemSoundID = 123 //获取声音地址 let path = Bundle.main.path(forResource: "3quan......

west_zll
15分钟前
0
0
为图片写水印的时候中文乱码

缘由:源代码在本地win7 操作系统添加水印正常,但在linux 7.4 上 添加水印乱码(空心方格) 问题的本质是在linux 操作系统中没有对Font 类支持的字体,才会出现乱码 问题截图: 1.系统linux...

qimh
16分钟前
0
0
微信小游戏子域和主域

1、主域只能够设置自身的敏感属性值 2、子域只能够读取自身、朋友、群友的敏感属性值

微信小程序-暗潮
16分钟前
0
0
Django时区详解

引言 相信使用Django的各位开发者在存储时间的时候经常会遇到这样子的错误: RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. 这个错误到底...

bobway
21分钟前
0
0
改造工程步骤

背景: 对于存在有问题的项目(包括 代码不规范 数据库表命名不规范 )需要改造 步骤: 1 新建工程 : 将需要改造的项目拷贝一份 修改项目名称 2 将相应的表结构拷贝到新的数据库中 修改不直...

猿神出窍
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部