这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、本堂课重点内容
本堂课的知识要点有哪些?
- Go语言函数的声明
- Go语言init函数和main函数
二、详细知识点介绍
本堂课介绍了哪些知识点?
Go语言函数的声明
-
内部函数是指函数的作用域是在包内或整个Go语言程序内(在各个包内可见)的函数。
-
Go语言的函数由两大部分组成:函数头和函数体。函数声明的语法格式如下:
func 函数名称(参数列表)(返回值列表){ 函数体 } -
函数头包括:关键字、函数名和函数签名构成。
-
函数体由一对花括号和若干Go语句构成。
-
函数名称可以是任何合法的Go语言标识符,其命名规则与变量名一样,首字母小写其作用域为本包内,首字母大写则包外可见,可以被其它包引用。函数名称是可以省略的,没有名称的函数称为匿名函数,或闭包。
-
所谓匿名函数就是没有名字的函数,匿名函数的声明除了没有函数名称之外,其它的与命名函数完全相同。采用以下格式声明:
func (参数列表)(返回值列表){ 函数体 } -
匿名函数由于没有名字,无法按名字调用,或者作为单独语句运行,必须在定义的时候就赋值给一个变量,然后以这个变量来代替匿名函数被调用;或者在其定义的右花括号外加上一对小括号,表示对该匿名函数的调用。
-
声明一个在外部实现的函数,只需要给出函数名及函数签名,不需要给出函数体,因而花括号及函数体是不需要的。
-
在Go语言中,函数属于一等值,也就是说函数可以当作变量来使用,可以给另一个变量赋值。函数变量不同于基础数据类型变量,基础数据类型变量的类型由声明时指明的数据类型决定,而函数变量的类型就是函数,需要通过
type关键字来声明。其语法格式如下:type ftn func (参数列表)(返回值列表)ftn称为函数类型。
Go语言init函数和main函数
init函数为Go语言保留的用于包级别的初始化函数,该函数不能接受任何参数,也没有返回值。init函数由用户实现,但用户不能显式调用它,只能由操作系统调用执行。- 每个包内可以有0到多个
init函数,多个init函数的执行顺序默认按其出现的顺序。各个包内的init函数的执行顺序严格按照引入的顺序执行。 - 每个被引入包内的
init函数总是先于引入它的包被执行。 - 每个包内的执行顺序总是先创建常量和变量,接着执行
init函数,然后再返回引入它的上层包。 - Go语言规定Go程序必须有一个
main包,main包中必须有一个main函数,用作程序的入口。 - 尽管有
init函数的存在,先于main函数被执行,但是,init函数仅仅是包级别的初始化,多用于环境变量,注册等应用,只有main函数才是用户程序的真正开始。main函数没有参数,也没有返回值,不使用return语句。 - Go语言在执行完所有包的
init函数及常量、变量定义后开始执行main函数,main函数执行完毕,将退出程序,返回操作系统。