go 函数

函数

普通函数

package main

import "fmt"

// 单返回值
func sum(a int, b int) int {
	return a + b
}

// 多返回值
func test2() (string, int) {
	name := "张三"
	age := 11
	return name, age
}

// 命名多返回值
// 命名多返回值不用声明变量 var name := "张三"
func test3() (name string, age int) {
	name = "张三"
	age = 11
	return name, age
}

func main() {
	//s := sum(1, 2)
	//fmt.Println(s)

	n, a := test2()
	fmt.Println(n, a)
}

函数类型

package main

import "fmt"

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

func max(a int, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

func main() {
	type f1 func(int, int) int
	// 函数类型为f1
	var ff f1 = sum
	r := ff(1, 2)
	fmt.Println(r)

	ff = max
	r = ff(1, 2)
	fmt.Println(r)
}

类型定义和类型别名

package main

import "fmt"

func main() {
	// 类型定义 创建一个新类型
	//type MyInt int
	//var i MyInt = 100
	//fmt.Printf("%T,%v", i, i) // main.MyInt,100

	// 类型别名 类型不变
	type MyInt = int
	var i MyInt = 100
	fmt.Printf("%T,%v", i, i) // int,100
}

高阶函数

函数作为参数

package main

import "fmt"

func say(name string) {
	fmt.Println(name)
}

func f1(name string, f func(string)) {
	f(name)
}

func main() {
	f1("hello world", say)
}

返回值为函数

package main

import "fmt"

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

func sub(a int, b int) int {
	return a - b
}

func cal(operator string) func(int, int) int {
	switch operator {
	case "+":
		return add
	case "-":
		return sub
	default:
		return nil
	}
}

func main() {
	ff := cal("+")
	r := ff(1, 3)
	fmt.Println(r)
}

匿名函数

package main

import "fmt"

func main() {

	// 匿名执行函数
	r := func(a int, b int) int {
		if a < b {
			return b
		} else {
			return a
		}
	}(1, 2)
	fmt.Println(r)

	//匿名函数
	max := func(a int, b int) int {
		if a < b {
			return b
		} else {
			return a
		}
	}
	r2 := max(1, 4)
	fmt.Println(r2)
}

闭包

基础

func main() {
	f1 := add()
	r := f1(10)
	fmt.Println(r)

	r2 := f1(20)
	fmt.Println(r2)

	fmt.Println("---------")
	// 重新创建一个函数,闭包就被清空,值不会被保存
	f2 := add()
	r5 := f2(10)
	fmt.Println(r5)
}

进阶

package main

import "fmt"

func cal(base int) (func(int) int, func(int) int) {
	add := func(a int) int {
		base += a
		return base
	}

	sub := func(a int) int {
		base -= a
		return base
	}

	return add, sub
}
func main() {
	add, sub := cal(1)
	r := add(9)
	fmt.Println(r) // 10

	// 因为没有重新调用cal函数,所以执行减函数时,是复用加后的值
	r2 := sub(2)
	fmt.Println(r2) // 8
}

可变参数列表

func sumArgs(values …int)

  • 可传入多个值
  • 值的类型为...后面的类型
package main

import (
	"fmt"
)

func sumArgs(values ...int) {
	for i := range values {
		fmt.Println(i)
	}
}
func main() {
	sumArgs(1, 2, 3)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值