博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六、使用函数
阅读量:6279 次
发布时间:2019-06-22

本文共 2621 字,大约阅读时间需要 8 分钟。

小例子:

package mainimport (        "fmt")// 参数,返回值func getsum(arr []int) int {    sum := 0    for elem := range arr {    sum += elem}return sum} func main() {    var a = []int{
1, 2, 3, 4, 5} var b = []int{
3, 2, 3, 1, 6, 4, 8, 9} fmt.Println(getsum(a)) fmt.Println(getsum(b))}

 

 

函数格式:

func 函数名 (参数) 返回值类型 {    函数体}

 

实参和虚参:

和大多数语言一样,实参就是在全局或者局部创建的变量,虚参就是用来做占位符的。

 

返回多个参数的函数:

package main import (    "fmt") func getsum(arr []int) (sum int, avr float64) {    sum = 0    avr = 0.0    for _, elem := range arr {        sum += elem    }    avr = float64(sum) / float64(len(arr))    // return sum, avr  // 两种方式    return} func main() {    var arr = []int{
1, 2, 3, 4, 5} fmt.Println(getsum(arr))}

 

变长参数的函数:

格式

package main import (    "fmt") // 注意变长参数只能是最后一个参数func getsum(arr ...int) (sum int) {    sum = 0    for _, elem := range arr {        sum += elem    }    return sum} func main() {    fmt.Println(getsum(1, 2, 3))}

 

 

闭包函数:

以前没接触过的新概念,就是讲整个函数赋值给一个变量。

package main import (    "fmt") func main() {    sum := func(arr ...int) (res int) {        res = 0        for _, elem := range arr {            res += elem        }        return res    }    fmt.Println(sum(1, 2, 3))}

 

闭包对于外层函数的变量具有访问和修改的权利。

例如:

package main import (    "fmt") func main() {    base := 2    sum := func(arr ...int) (res int) {        res = 0        for _, elem := range arr {            res += elem        }        // 这里的base是外层main函数中的变量        base += 4        return res / base    }    fmt.Println(sum(1, 2, 3))}

 

递归函数:

没有什么难点。

package main import (    "fmt") func feibo(x int) (res int) {    // 天哪这个地方不加花括号会报错的    if x == 0 {        res = 0    } else if x <= 2 {        res = 1    } else {        res = feibo(x-1) + feibo(x-2)    }    return res} func main() {    for i := 0; i <= 10; i++ {        fmt.Println(feibo(i))    }}

 

异常处理:

package mainimport (    "fmt") func first() {    fmt.Println("this is first func")} func second() {    fmt.Println("this is second func")} func main() {    /*     Golang语言提供defer关键字用来在函数运行结束的时候运行一段代码     或者调用一个清理函数。类似finally    */    defer first()    second()    // 虽然顺序上first()函数是先运行的    // 但是first()函数用defer关键字修饰,所以main函数结束后才运行first()函数}

 

panic & recover:

正如词意:异常,回滚

panic用来触发异常,而recover用来终止异常并且传递给panic的值

注意!!!:

recover只能配合defer使用。

例子:

package main import (    "fmt") func main() {    defer func() {        msg := recover()        fmt.Println(msg)    }()    fmt.Println("It's ok")    panic("There are exception")    /*     这里是不会输出recover捕捉到的异常信息的,因为panic哪里出现了异常就停止了程序     所以说recover必须配合defer使用     msg := recover()     fmt.Println(msg)    */}

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/9053474.html

你可能感兴趣的文章
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
《Arduino家居安全系统构建实战》——1.5 介绍用于机器学习的F
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>