Go语言基础:函数
来源:互联网 发布:巴黎香榭花果茶 淘宝 编辑:程序博客网 时间:2024/05/20 18:43
函数是程序的核心部分,所有的程序都是由一个一个的函数组成的。
函数声明几种格式
func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {//这里是处理逻辑代码//返回多个值return value1, value2}
func funcName(input1 type1, input2 type2)(type1, type2) {//这里是处理逻辑代码return value1, value2}
func funcName(input1 type1, input2 type2)type1 {//这里是处理逻辑代码return value1}
func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {//这里是处理逻辑代码output1 = value1output2 = value2return}
从上面可以看出:
- Go中用关键词func来声明一个函数 funcName
- 函数可以有多个返回值,这点跟C、JAVA等很不一样
- 返回值变量你可以声明,也可以不声明,直接就两个类型
- 当只有一个返回值时,声明中可以省略括号
- 直接在函数里初始化,返回值不带任何参数,直接return返回
变参的格式
func myfunc(arg...int) {}
arg…int告诉Go这个函数接受不定数量的参数。在函数体中,变量arg是一个int的slice。
package mainimport "fmt"func myfunc(arg ...int32) { fmt.Print(arg) for _, n := range arg { fmt.Printf(" %d", n) }}func main() { myfunc(1, 2, 3, 4)}
输出:
[1 2 3 4] 1 2 3 4
延迟defer
defer在声明时不会立即执行,而是在函数return前,按照先进先出的原则依次执行每一个defer语句,然后再return。类似于面向对象的析构函数。
具体的机制参考:Go语言的defer,你真的懂了吗?
main函数和init函数
Go 里面有两个保留的函数: init 函数(能够应用于所有的 package )和 main 函数(只能应用于 package main )。
- 两个函数定义时不能有任何参数和返回值
- 建议在每一个package中每个文件只写一个init函数。尽管可以拥有多个init函数
- init函数不能被其他函数调用,而是main函数执行前,自动调用
- 对同一个go文件的init()调用顺序是从上到下的
- 对同一个package中不同文件按提交给编译器的源文件名顺序来调用init函数
- 对于对不同的package,如果不相互依赖的话,按照main包中”先import的后调用”的顺序调用其包中的init();如果package存在依赖,则先调用最早被依赖的package中的init();最后调用main函数
main 函数引入包初始化流程图
程序的初始化和执行都起始于 main 包。如果 main 包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到 fmt 包,但它只会被导入一次,因为没有必要导入多次)。 当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行 init 函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对 main 包中的包级常量和变量进行初始化,然后执行 main 包中的init 函数(如果存在的话),最后执行 main 函数。具体的执行流程如下图:
import
点操作
import( ."fmt")
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的 fmt.Println(“hello world”)可以省略的写成 Println(“hello world”)
别名操作
import ( f "fmt")
别名操作的话调用包函数时前缀变成了我们的前缀,即 f.Println(“hello world”)
_操作
import ( "database/sql" _ "github.com/ziutek/mymysql/godrv")
_ 操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的 init 函数。_ 操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的 init 函数。
http://blog.csdn.net/htyu_0203_39/article/details/50948193
- Go语言基础:函数
- Go语言基础入门--函数,错误处理
- Go语言基础
- GO语言基础学习
- Go语言基础概念
- go 语言基础
- Go 语言基础语法
- go语言基础概要
- Go语言基础
- Go语言基础:struct
- Go语言基础:method
- Go语言基础:Interface
- Go语言基础:并发
- 2 Go语言基础
- go语言基础
- go语言基础学习
- Go语言基础语法
- Go语言基础
- html中隐藏域hidden的作用介绍
- Swift2.0学习一
- 30分钟手把手教你学webpack实战
- iOS开发基础block的形式讲解
- 给list<class>赋值
- Go语言基础:函数
- C#使用Log4Net记录日志
- printf()中的格式问题
- (LeetCode)Remove Linked List Elements --- 删除节点元素
- System.getProperty("user.dir")
- HDU1796 简单容斥
- Centos下软件安装与卸载
- iOS pthread创建中pthread_attr_t参数详解
- Android数据存储五种方式总结