Go语言_函数学习篇

简介:

这里要说一下是Go函数和一些其他语言不一样的地方

1 函数格式不同

1
2
3
4
5
6
func GetMsg(i  int ) (r  string ) {
     fmt.Println(i)
     r =  "hi"
     return  r
 
}

func说明这个是个函数

GetMsg是函数名

(i int) 函数接收一个int参数

(r string) 函数返回一个string类型返回值

2 函数可以返回多个返回值

这点和c,php都不一样,和lua是一样的

1
2
3
4
5
6
7
func GetMsg(i  int ) (r  string , err  string ) {
     fmt.Println(i)
     r =  "hi"
     err =  "no err"
     return  r,err
 
}

3 defer的使用

defer的意思是"在函数退出时调用",特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer

func ReadFile(filePath string )(){
     file.Open(filePath)
     defer file.Close()
     
     if  true  {
         file.Read()
     } else  {
         return  false
     }
 
}

这样写的意思是在file.Open后不立即调用close,当return false的时候调用file.Close().这样就有效避免了C语言中的内存泄露问题。

4 比较难理解的:panic,recover和defer

推荐看这篇博客:

http://blog.golang.org/2010/08/defer-panic-and-recover.html

defer的作用上一节说得很清楚了。

Panic和Recover我们就将他们看成是其他语言中的throw和catch

下面这个例子:

package main
 
import "fmt"
 
func main() {
     f()
     fmt.Println( "Returned normally from f." )
}
 
func f() {
     defer func() {
         if  r := recover(); r != nil {
             fmt.Println( "Recovered in f" , r)
         }
     }()
     fmt.Println( "Calling g." )
     g(0)
     fmt.Println( "Returned normally from g." )
}
 
func g(i int ) {
     if  i > 3 {
         fmt.Println( "Panicking!" )
         panic(fmt.Sprintf( "%v" , i))
     }
     defer fmt.Println( "Defer in g" , i)
     fmt.Println( "Printing in g" , i)
     g(i + 1)
}

返回了:

1
2
3
4
5
6
7
8
9
10
11
12
Calling g.
Printing  in  g 0
Printing  in  g 1
Printing  in  g 2
Printing  in  g 3
Panicking!
Defer  in  g 3
Defer  in  g 2
Defer  in  g 1
Defer  in  g 0
Recovered  in  f 4
Returned normally  from  f.

Panic抛出了信息,并且跳出函数。Recover接受到了信息,并且继续处理。

这个例子理解了基本就掌握了Recover和Panic

目录
相关文章
|
自然语言处理 Java Go
Go语言学习之函数
Go语言学习之函数
35 0
|
1月前
|
设计模式 测试技术 Go
学习Go语言
【10月更文挑战第25天】学习Go语言
26 4
|
5月前
|
Cloud Native Java Go
为什么要学习Go语言?
GO logo的核心理念,即简单胜于复杂。使用现代斜体无衬线字体与三条简单的运动线相结合,形成一个类似于快速运动的两个轮子的标记,传达速度和效率。字母的圆形暗示了GO地鼠的眼睛,创造了一个熟悉的形状,让标记和吉祥物很好地搭配在一起。
68 4
|
存储 自然语言处理 Go
Go语言学习2-基本词法
本篇介绍 Go语言基本词法概述
64 1
Go语言学习2-基本词法
|
7月前
|
存储 编译器 Go
Go语言学习12-数据的使用
【5月更文挑战第5天】本篇 Huazie 向大家介绍 Go 语言数据的使用,包含赋值语句、常量与变量、可比性与有序性
87 6
Go语言学习12-数据的使用
|
7月前
|
存储 Go 开发者
【Go语言专栏】函数在Go语言中的使用与实现
【4月更文挑战第30天】本文介绍了Go语言中函数的使用和实现,包括函数定义、参数传递、返回值、匿名函数、变长参数、函数类型、闭包和错误处理。通过示例展示了如何定义和调用函数,以及如何利用闭包和递归解决问题。此外,还提到了Go函数作为一等公民的特性,允许存储和传递。进一步学习可参考官方文档和相关书籍。
41 0
|
7月前
|
存储 Go 开发者
【Go语言专栏】Go语言中的结构体与方法
【4月更文挑战第30天】Go语言中的结构体是聚合数据类型,用于自定义复杂类型。通过`type`和`struct`关键字定义结构体,包含多个不同类型的字段。结构体实例化后,使用点操作符访问字段。方法为结构体添加行为,定义时需指定接收者(值或指针)。方法调用同样使用点操作符。匿名结构体无需命名,嵌套结构体可构建复杂数据结构。选择值或指针接收者取决于是否需要修改结构体状态。理解并熟练运用结构体和方法是编写高效Go代码的关键。
49 0
|
7月前
|
Java Go 数据安全/隐私保护
Go语言学习7-函数类型
本篇 Huazie 向大家介绍 Go 语言的函数类型
59 1
Go语言学习7-函数类型
|
7月前
|
Go 开发者
Go语言函数的高级特性探索
【2月更文挑战第4天】本文旨在深入解析Go语言中函数的高级特性,包括可变参数函数、函数作为值传递、函数作为参数传递、函数作为返回值、函数指针以及泛型函数等。通过掌握这些高级特性,你将能够编写更加灵活和强大的Go语言程序。
|
7月前
|
自然语言处理 编译器 Go
GO语言中的方法
GO语言中的方法
49 0