小白入门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()
}
相关推荐
zhuyasen5 小时前
当Go框架拥有“大脑”,Sponge框架集成AI开发项目,从“手写”到一键“生成”业务逻辑代码
后端·go·ai编程
写代码的比利7 小时前
Kratos 对接口进行加密转发处理的两个方法
go
chenqianghqu8 小时前
goland编译过程加载dll路径时出现失败
go
马里嗷11 小时前
Go 1.25 标准库更新
后端·go·github
郭京京11 小时前
go语言redis中使用lua脚本
redis·go·lua
心月狐的流火号15 小时前
分布式锁技术详解与Go语言实现
分布式·微服务·go
一个热爱生活的普通人17 小时前
使用 Makefile 和 Docker 简化你的 Go 服务部署流程
后端·go
HyggeBest1 天前
Golang 并发原语 Sync Pool
后端·go
来杯咖啡1 天前
使用 Go 语言别在反向优化 MD5
后端·go
郭京京2 天前
redis基本操作
redis·go