Go语言学习——函数进阶、变量作用域、函数类型与变量

函数

函数的定义

基本格式

参数的格式

有参数的函数

参数类型简写

可变参数

返回值的格式

有返回值

多返回值

命名返回值

变量作用域

  1. 全局作用域
  2. 函数作用域
    1. 先在函数内部找变量,找不到往外层找
    2. 函数内部的变量,外部是访问不到的
  3. 代码块作用域

高阶函数

函数也是一种类型,它可以作为参数也可以作为返回值

函数进阶

变量作用域

全局变量

全局变量是定义在函数外部的变量

在函数中可以访问到全局变量

局部变量

函数内定义的变量无法在该函数外使用

语句块定义的变量(if条件判断、for循环、switch语句)

全局作用域 函数内部作用域 语句块作用域

package main

import "fmt"

// 变量的作用域

var x = 100 // 定义一个全局变量

// 定义一个函数
func f1() {
	// x := 10
	name := "理想"
	// 函数中查找变量的顺序
	// 1. 先在函数内部查找
	// 2. 找不到就往函数的外面查找,一直找到全局
	fmt.Println(x, name)
}

func main(){
	f1()
	// fmt.Println(name) // 函数内部定义的变量只能在该函数内部使用

	// 语句块作用域
	if i := 10; i < 18 {
		fmt.Println("上学啦")
	}
	// fmt.Println(i)
	for j := 0; j < 5; j++ {
		fmt.Println(j)
	}
	// fmt.Println(j)
}

函数类型与变量

定义函数类型

type关键字定义一个函数类型:

type calculation func(int, int) int

定义了一个calculation函数类型,它接收两个int类型的参数并且返回一个int类型的返回值

package main

import (
	"fmt"
)

// 函数类型

func f1() {
	fmt.Println("Hello world")
}

func f2()int {
	return 10
}

func f4(x, y int) int {
	return x + y
}

// 函数也可以作为参数的类型
func f3(x func() int) {
	ret := x()
	fmt.Println(ret)
}

func ff(a, b int) int {
	return a + b
}

// 函数还可以作为返回值
func f5(x func() int) func(int, int) int {
	return ff
}

func main(){
	a := f1
	fmt.Printf("%T\n", a) // func()
	b := f2
	fmt.Printf("%T\n", b) // func() int

	f3(f2)
	f3(b)
	fmt.Printf("%T\n", f4) // func(int, int) int
	// f3(f4)

	f7 := f5(f2)
	fmt.Printf("%T\n", f7)
}
posted @ 2022-05-11 22:45  寻月隐君  阅读(33)  评论(0编辑  收藏  举报