Go——小白学习之函数

简介: 普通函数调用流程(调用流程:先调用后返回,先进后出)func func2(c int) { fmt.Println("c=", c)}func func1(b int) { func2(b - 1) fmt.

普通函数调用流程(调用流程:先调用后返回,先进后出)

func func2(c int) {

fmt.Println("c=", c)

}

func func1(b int) {

func2(b - 1)

fmt.Println("b=", b)

}

func func0(a int) {

func1(a - 1)

fmt.Println("a=", a)

}

func main() {

func0(3)

}

结果为c= 1  b= 2  a= 3


函数递归

func func2(c int) {

if c == 0 {

fmt.Println("c=", c)

return                    //函数终止调用

}

func2(c - 1)                    //调用函数本身,直到满足条件

fmt.Println("c=", c)

}

func main() {

func2(3)

}


回调函数(函数有一个参数是函数类型,这个函数就是回调函数)

多态---多种形态,调用同一个接口,不同的表现,可以实现不同表现

先有想法,后面在实现功能

type newtype func(int, int) int

func add(a, b int) int {

return a + b

}

func minus(a, b int) int {

return a - b

}

func calc(a, b int, test newtype) (result int) {

//fmt.Println("calc")

result = test(a, b)

return

}

func main() {

num := calc(3, 5, add)

fmt.Printf("num=%d", num)

num = calc(3, 5, minus)

fmt.Printf("num=%d", num)

}

匿名函数基本语法

//带参数无返回值

func main() {

func(q, w int) {

fmt.Printf("q=%d,w=%d", q, w)

}(10, 20)

}

//有参有返回值

func main() {

max, min := func(i, j int) (max, min int) {

if i > j {

max = i

min = j

} else {

max = j

min = i

}

return

}(10, 20)

fmt.Printf("max=%d,min=%d", max, min)

闭包以引用方式捕获外部变量

func main() {

a := 10

str := "mike"

func() {

a = 888

str = "aaa"

fmt.Printf("内部 a=%d,str=%s", a, str)

}()

fmt.Printf("外部 a=%d,str=%s", a, str)

}            //返回结果都是匿名函数里的值

func test02() func() int {

var x int

return func() int {

x++

return x * x

}

}

//函数的返回值时一个匿名函数,返回一个函数类型

func main() {

f := test02() //返回值是一个匿名函数,通过f来调用返回的匿名函数,f来调闭包

fmt.Println(f())

fmt.Println(f())

fmt.Println(f())

fmt.Println(f())

}                                      //将函数作为第一级对象

目录
相关文章
|
1月前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
21天前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
73 1
|
1月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
1月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
4月前
|
人工智能 Dart Go
Go语言中的make和new函数的区别及使用场景
本文详细解析了Go语言中`make`和`new`函数的使用方法及区别。`make`用于创建切片、映射和通道等引用类型,返回初始化后的值;`new`用于创建任意类型的零值对象,返回指向该对象的指针。文章通过多个示例说明两者的应用场景,并总结了面试中可能遇到的相关问题,如底层实现、使用场景及优缺点等,帮助读者更好地理解和区分这两个函数。
141 1
|
4月前
|
Go
学习 Go并发模型
本文通过一个简单例子,讲解如何将数组数据转换为其平方值,并将其分解为三个步骤:生产信息(`producer()`)、处理信息(`square()`)和消费信息(`main()`)。进一步介绍了 FAN-OUT 和 FAN-IN 模型的优化,展示了多 goroutine 并发读写通道的实现方式。FAN-OUT 是多个 goroutine 从同一通道读取数据,而 FAN-IN 是单个 goroutine 从多个通道读取数据。最后强调了优化 FAN 模式时需根据具体场景解决瓶颈问题,并推荐使用带缓冲的通道以提高性能。
学习 Go并发模型
|
5月前
|
Go 调度
GO语言函数的内部运行机制分析
以上就是Go语言中函数的内部运行机制的概述,展示了函数在Go语言编程中如何发挥作用,以及Go如何使用简洁高效的设计,使得代码更简单,更有逻辑性,更易于理解和维护。尽管这些内容深入了一些底层的概念,但我希望通过这种方式,将这些理论知识更生动、更形象地带给你,让你在理解的同时找到编程的乐趣。
86 5
|
5月前
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
102 12
|
11月前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
192 7
|
11月前
|
设计模式 测试技术 Go
学习Go语言
【10月更文挑战第25天】学习Go语言
169 4

热门文章

最新文章