内容简介:函数本质上都是匿名的,命名函数是特例可变参数必须放在最后面,本质是slice。再引用可变参数时,需要加上如果给返回值命名了,就可以直接操作返回值,并且也可以通过defer函数对它(它们)进行操作。
命名函数与匿名函数
函数本质上都是匿名的,命名函数是特例
func A(a int) int {
return 12
}
var A=func(a int) int {
return 12
}
可变参数
可变参数必须放在最后面,本质是slice。再引用可变参数时,需要加上 ...
才行,如是
func A(a ...int) {
Foo(a...)
}
func Foo(b ...int) {
fmt.Println(b...)
}
命名的返回值
如果给返回值命名了,就可以直接操作返回值,并且也可以通过defer函数对它(它们)进行操作。
defer定义一个匿名函数,创建闭包,闭包对捕获的外部变量是以引用的方式进行访问。
如果是通过传参方式,还是会在defer执行的时候就对参数求值(这时候是值传递),我们这里讲的引用传递只针对捕获的外部变量。
方法与函数的转化
如果用面向对象的思路来讲,就是方法,如果按传统的面向过程的角度来说,就是函数。Go中可以很方便地将方法转化成函数,然后按照函数的方式来编写代码:
func CloseFile(f * File) error; func (f * File) Close error; var MyCloseFile = (*File).Close;
下面的三种用法都是等效的:
var f *File f.Close() CloseFile(f) MyCloseFile(f)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Web Reputation Systems
Randy Farmer、Bryce Glass / Yahoo Press / 2010 / GBP 31.99
What do Amazon's product reviews, eBay's feedback score system, Slashdot's Karma System, and Xbox Live's Achievements have in common? They're all examples of successful reputation systems that enable ......一起来看看 《Building Web Reputation Systems》 这本书的介绍吧!