小白入门Go => 函数的基本认识与使用

Go函数

函数的基本认识

函数(function):每一个程序都包含很多的函数:函数是基本的代码块。

函数存在的目标:

  1. 对特定的、可复用的程序进行封装:
go 复制代码
package main

func main() {
    a,b := 1,2
    c,d := 3,4
    // res1 := a + b
    // res2 := c + d
    
    //a,b是实际参数(实参)
    res1 := plus(a,b)
    res2 := plus(c,d)
    
    println(res1,res2)
}

//加法函数,计算两数之和(函数更具备语义化)
func plus(num1 int,num2 int) int {
    res := num1 + num2
    return res
}
  1. 可编写强大的函数接口(后续章节介绍)

函数声明

1.具名函数声明: 只能出现在全局作用域,函数内部不能进行函数声明

  • func:函数声明关键字
  • main:函数名
  • ():形式参数(形参)容器
  • {}:函数体(装有函数逻辑)的容器
go 复制代码
package main

func main() {
    
}

2.函数表达式(匿名函数): 声明一个匿名函数赋值给一个变量,作为函数表达式

go 复制代码
test := func(){

}

函数具备一等公民的特征:

  1. 函数可以进行参数传递(回调特性)
go 复制代码
// cb => callback回调函数 => 函数参数
// func (a int, b int) int 
func test(cb func()){
    cb()
}

2.函数可以作为返回值抛出(闭包特性)

go 复制代码
func test2() func() {
    //函数内部定义的函数就是闭包函数
    a := 1
    //test函数能够访问test2函数的局部作用域
    //test函数捆绑在test2的作用域下,才形成了闭包
    test := func(){
        fmt.println("closure")
    }
    //返回test函数让外部调用
    return test
}

3.函数可以作为值进行变量赋值(值特性)

go 复制代码
func main() {
    //函数作为值赋给一个变量
    testFunc := test3
    testFunc()
}

func test3(){
    fmt.Println("test3")
}

4.函数可以实现接口(接口特性,后续章节介绍)

main函数:

  • main函数也是一个普通Go函数,可在任意地方调用执行
  • main函数是Go程序中的入口函数(自动执行一次)
  • main函数没有参数和返回值
go 复制代码
package main

func main() {
    fmt.Println("Hello World go!")
}

函数与作用域

  1. 作用域就是变量可访问的范围
  2. 作用域就是变量的容器
  3. main函数外有一个所有函数都能访问的作用域 - 全局作用域
  4. 每个函数内容是一个局部作用域(在函数内访问变量,函数内有的变量优先访问,不会访问函数外部同名变量)
  5. 函数作用域 => 可访问 => 外部作用域
  6. 函数内部也可以声明函数,函数作用域是可以嵌套的
  7. 函数内部只能定义函数表达式,不能进行函数声明
  8. 内部作用域可以访问外部作用域,但外部作用域是无法访问内部作用域的
go 复制代码
func test4(){
    //Go函数内部不允许函数声明
    //func goFunc(){
    // 
    //}
    goFunc := func(){
       fmt.Println("goFunc")
    }
    goFunc()
}
相关推荐
喵个咪8 小时前
开箱即用的GO后台管理系统 Kratos Admin - 交互式API文档 Swagger UI
后端·go·swagger
小石潭记丶21 小时前
goland无法debug项目
go
千舟1 天前
自己动手编写tcp/ip协议栈4:tcp数据传输和四次挥手
网络协议·go
CHSnake1 天前
gRPC和gRPC-gateway
go
喵个咪2 天前
开箱即用的GO后台管理系统 Kratos Admin - 后端项目结构说明
后端·微服务·go
烛阴3 天前
Go语言内置包:提升开发效率的必备神器!
后端·go
天葬3 天前
Ollama 模型迁移备份工具 ollamab
go·ollamab
魔法小匠4 天前
「Go设计哲学」为什么云原生时代属于Go语言?(剖析Go核心优势)
go
陈明勇4 天前
Go 1.24 新特性:泛型类型别名,让代码变得更灵活、更清晰
后端·go
Java手札5 天前
【工具】在idea运行go后端
java·ide·go·intellij-idea