教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 关于Golang的那些事(五) -- 函数

关于Golang的那些事(五) -- 函数

发布时间:2022-02-28   编辑:jiaochengji.com
教程集为您提供关于Golang的那些事(五) -- 函数等资源,欢迎您收藏本站,我们将为您提供最新的关于Golang的那些事(五) -- 函数资源

       函数包含连续的执行语句,可以在代码中通过调用函数来执行它们。函数能将复杂的逻辑转换为一块块的代码块,使得更具可读性,另外有一些公共的函数,可以让团队合作更加便利,在Golang当中,函数和Node.js稍微有一点点的不同,下面由我来讲解讲解。

       首先是函数的声明,在Golang中函数的声明就类似强类型的node.js函数声明,func name(param list) (result-list) {/** body **/}, 形式参数列表指定了一组变量的参数名和参数类型,它们的实参由调用这个函数的调用方传递过来,返回类型稍微有点不同,在Golang里面除了没有返回值的函数,其他都要注明返回类型,另外它也支持多个返回值。函数的类型称作函数签名,当两个函数拥有相同的形参列表和返回列表时,我们就说他们的签名一样。每次我们调用的时候,参数要一一对应,顺序也要相同,Golang函数参数没有默认值的概念。

      那么在Golang当中,函数如何处理错误呢?我们可以利用它可以有多个返回值的特性,将错误返回给调用方,我们习惯上,把错误的变量放在最后一个结果返回。如果错误只有一种情况,通常返回布尔值,比如在缓存当中取值,如果键值不存在就会返回错误,那我们就可以这样写:value,ok := cache.query(key), 如果ok是真就是正常返回了键值,如果ok是假就说明键值对不存在。错误只有一种的情况在现实的业务逻辑当中,其实很少,大部分都是一些未考虑到或者意外的错误,比如连接不上数据库,内存不足等等,这个时候我们通常将错误封装到最后一个返回值里面,调用方先查看这个错误存不存在,如果存在,先处理错误,如果不存在,就继续下面的逻辑,比如调用http的get请求获取信息,resp,err := http.get(url); if err != nil { return nil, err}; 。另外,对于错误,我们可以采用fmt.Errorf的fmt.Sprintf函数格式化错误信息并且返回一个新的错误值,我们把原始的错误消息不断添加上去,构成一个错误链条,当错误最终到达main函数的时候,就能得到一个清晰的从根本原因到总体故障的因果链。一种更加优雅的方式输出错误是自定义打印的格式,包含时间和日期、内容,只记录下错误,让程序继续运行,这样就减少了打断程序运行的频率。

       在Golang当中,和Node.js一样,它还有一种很特殊的函数,叫做匿名函数。我们知道,命名函数只能在包级的作用域进行声明,但是匿名函数可以突破这个限制。比如下面这个平方函数:

<blockquote>

func  squares()  func()  int {

   var x int

   return func() int {

        x

        return x * x

   }

}

</blockquote>

当我们在main函数里面这样调用的时候,就会把x的作用域扩大了

<blockquote>

func main() {

    f := squares() 

    fmt.Println(f()) // 1

     fmt.Println(f()) // 4

    fmt.Println(f())  // 9

    fmt.Println(f()) // 16    

}

</blockquote> 到此这篇关于“ 关于Golang的那些事(五) -- 函数”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
关于Golang的那些事(五) -- 函数
探索Golang协程实现——从v1.0开始
Golang学习笔记(五):Go语言与C语言的区别
golang会取代php吗
想系统学习GO语言(Golang
Golang必备技巧:接口型函数
golang事件机制
使用Go语言一段时间的感受
为什么要学 Go
说一说golang的协程

[关闭]
~ ~