小白入门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()
}
相关推荐
代码扳手11 小时前
Golang 实战:用 Watermill 构建订单事件流系统,一文掌握概念与应用
后端·go
百锦再16 小时前
Python、Java与Go:AI大模型时代的语言抉择
java·前端·vue.js·人工智能·python·go·1024程序员节
豆浆Whisky18 小时前
掌握Go context:超越基础用法的正确实践模式|Go语言进阶(13)
后端·go
ErizJ1 天前
IM|im-service
golang·kafka·go·im·心跳检测
光头闪亮亮1 天前
curl库应用-c++客户端示例及golang服务端应用示例
c++·go
-芒果酱-1 天前
对中兴光猫zteOnu.exe项目的简单分析(提供下载地址)
go
千码君20162 天前
Go语言:常量设置的注意事项
go·const·iota·常量·var·编译期可计算·无类型常量
qinyuan152 天前
gorm读取PostgreSQL的json数据类型
后端·go
mit6.8242 天前
[OP-Agent] 可扩展架构 | 插件管理器plugins.go
go·1024程序员节