Go语言函数的声明 | 青训营笔记

97 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

一、本堂课重点内容

本堂课的知识要点有哪些?

  • Go语言函数的声明
  • Go语言init函数和main函数

二、详细知识点介绍

本堂课介绍了哪些知识点?

Go语言函数的声明

  1. 内部函数是指函数的作用域是在包内或整个Go语言程序内(在各个包内可见)的函数。

  2. Go语言的函数由两大部分组成:函数头和函数体。函数声明的语法格式如下:

    func 函数名称(参数列表)(返回值列表){
    	函数体
    }
    
  3. 函数头包括:关键字、函数名和函数签名构成。

  4. 函数体由一对花括号和若干Go语句构成。

  5. 函数名称可以是任何合法的Go语言标识符,其命名规则与变量名一样,首字母小写其作用域为本包内,首字母大写则包外可见,可以被其它包引用。函数名称是可以省略的,没有名称的函数称为匿名函数,或闭包。

  6. 所谓匿名函数就是没有名字的函数,匿名函数的声明除了没有函数名称之外,其它的与命名函数完全相同。采用以下格式声明:

    func (参数列表)(返回值列表){
    	函数体
    }
    
  7. 匿名函数由于没有名字,无法按名字调用,或者作为单独语句运行,必须在定义的时候就赋值给一个变量,然后以这个变量来代替匿名函数被调用;或者在其定义的右花括号外加上一对小括号,表示对该匿名函数的调用。

  8. 声明一个在外部实现的函数,只需要给出函数名及函数签名,不需要给出函数体,因而花括号及函数体是不需要的。

  9. 在Go语言中,函数属于一等值,也就是说函数可以当作变量来使用,可以给另一个变量赋值。函数变量不同于基础数据类型变量,基础数据类型变量的类型由声明时指明的数据类型决定,而函数变量的类型就是函数,需要通过type关键字来声明。其语法格式如下:

    type ftn func (参数列表)(返回值列表)
    

    ftn称为函数类型。

Go语言init函数和main函数

  1. init函数为Go语言保留的用于包级别的初始化函数,该函数不能接受任何参数,也没有返回值。init函数由用户实现,但用户不能显式调用它,只能由操作系统调用执行。
  2. 每个包内可以有0到多个init函数,多个init函数的执行顺序默认按其出现的顺序。各个包内的init函数的执行顺序严格按照引入的顺序执行。
  3. 每个被引入包内的init函数总是先于引入它的包被执行。
  4. 每个包内的执行顺序总是先创建常量和变量,接着执行init函数,然后再返回引入它的上层包。
  5. Go语言规定Go程序必须有一个main包,main包中必须有一个main函数,用作程序的入口。
  6. 尽管有init函数的存在,先于main函数被执行,但是,init函数仅仅是包级别的初始化,多用于环境变量,注册等应用,只有main函数才是用户程序的真正开始。main函数没有参数,也没有返回值,不使用return语句。
  7. Go语言在执行完所有包的init函数及常量、变量定义后开始执行main函数,main函数执行完毕,将退出程序,返回操作系统。

三、引用参考

我参考了哪些外部博客/笔记/文章?