Go语言基础09——func函数

一、函数的基本定义

package main
import "fmt"
// 函数
// 定义一个不需要参数也没返回值的函数: sayHello
func sayHello(){
    fmt.Println("Hello jiayuan!")
}
// 定义一个接收string类型的name参数
func sayHello2(name string){
    fmt.Println("Hello", name)
}
// 定义接收多个参数的函数并且有一个返回值
func intSum(a int, b int)int{
    ret := a + b
    return ret
}

func intSum2(a int, b int)(ret int){
    ret = a + b
    return
}

// 函数接收可变参数
func intSum3(a ...int)int{
    ret := 0
    for _, v := range a {
        ret = ret + v
    }
    return ret
}

// 固定参数和可变参数同时出现时 可变参数放在最后
// go语言的函数中没有固定参数
func intSum4(a int, b ...int)int{
    ret := a
    for _, v := range b {
        ret = ret + v
    }
    return ret
}
// Go语言中函数参数类型简写
func intSum5(a, b int)(ret int){
    ret = a + b
    return
}

// 定义具有多个返回值的函数
func calc(a, b int)(sum, sub int){
    sum = a + b
    sub = a - b
    return
}

func main(){
    //函数调用
    sayHello()
    sayHello2("jushi")
    
    fmt.Println(intSum3())
    fmt.Println(intSum3(1))
    fmt.Println(intSum3(1, 2))
    fmt.Println(intSum3(1, 2, 3))

    fmt.Println(intSum4(10))           // a = 10, b = []
    fmt.Println(intSum4(10, 20))       // a = 10, b = [20]
    fmt.Println(intSum4(10, 20, 30))   // a = 10, b = [20, 30]

    x, y := calc(100, 200)
    fmt.Println(x, y)
}

二、变量作用域

package main
import "fmt"
// 函数进阶之变量作用域
// 定义全局变量num
var num = 10

// 定义函数
func testGlobal() {
    fmt.Println("全局变量", num)
    num = 100
    // 函数中使用变量
    // 1. 先在自己函数中查找 找到了就用
    // 2. 函数中找不到变量就往外层找全局变量
    // 可以在函数中访问全局变量
    fmt.Println("变量", num)
    //name := "jiayuan"
}

func main() {
    testGlobal()
    // 外层不能访问到函数的内部变量 (局部变量)
    // fmt.Println(name)
    // 变量i此时只在for循环的语句块中生效
    for i:=0; i<5; i++{
        // fmt.Println(i)
    }
    // fmt.Println(i) // 外层访问不到内部for语句块中的变量
    abc := testGlobal
    abc()
}

三、函数作为变量

package main
import "fmt"
func add(x, y int)int{
    return x + y
}
func sub(x, y int)int{
    return x - y
}
func operator(x, y int, op func(int, int)int) int {
    return op(x, y)
}
func main(){
    fmt.Println(operator(1, 2, add))
    fmt.Println(operator(3, 6, sub))
}

四、延迟执行

package main
import "fmt"
// defer 延迟执行
func main(){
    fmt.Println("start...")
    defer fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    fmt.Println("end...")
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容