小白入门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()
}
相关推荐
桃园码工19 小时前
1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]
go·gin·环境搭建
云中谷19 小时前
Golang 神器!go-decorator 一行注释搞定装饰器,v0.22版本发布
go·敏捷开发
苏三有春1 天前
五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)
git·go·github
我是前端小学生2 天前
Go语言中的方法和函数
go
探索云原生2 天前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
自在的LEE2 天前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
Gvto3 天前
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
go·smtp·mailtrap
白泽来了4 天前
【Go进阶】手写 Go websocket 库(一)|WebSocket 通信协议
开源·go
witton4 天前
将VSCode配置成Goland的视觉效果
ide·vscode·编辑器·go·字体·c/c++·goland
非凡的世界4 天前
5个用于构建Web应用程序的Go Web框架
golang·go·框架·web