Golang从入门到精通(十):Golang函数

函数

函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。

和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最后一行}之前或者return语句的时候会退出,其中 return 语句可以带有零个或多个参数;这些参数将作为返回值供调用者使用。简单的 return 语句也可以用来结束 for 死循环,或者结束一个Go协程(goroutine)

定义语法

Go语言中函数基本组成:关键字func、函数名、参数列表、返回值、函数体和返回语句。

语法如下:

func 函数名(参数列表) (返回值列表) {
    // 函数体
}

这里需要强调的是,Go语言函数的返回值类型和变量定义的数据类型一样,都要遵循Go语言的“后置原则”放在后面,这一点和C语言函数定义有显著不同。

另外,Go语言函数定义中如果参数列表中若干个相邻参数的类型相同,则可以在参数列表中省略前面的变量类型声明。

func Add(a, b int) int {        //这里a和b都是int类型
    // 函数体
}

最后,Go语言函数定义中左花括号的位置被强制规范,如果左花括号放置不规范,golang编译器会报编译错误。

//错误!!!左括号必须紧跟在括号后面
func hello()
{               //左括号不能另起一行
}

多值返回

Go语言的函数可以返回不止一个结果,即支持“多值返回”。

Go语言函数多值返回一般用于处理错误。比如在IO操作时候,不一定每次都能成功:可能文件不存在或者磁盘损坏无法读取文件。所以一般在函数调用发生错误时返回一个附加的结果作为错误值,习惯上将错误值作为最后一个结果返回。

func SumProductDiff(i, j int) (int, int, int) {
    return i+j, i*j, i-j
}

不定参数

如果你对Python比较熟悉,你会知道Python函数参数个数可以是不确定的。和Python类似,Go语言函数也支持可变的参数个数。

在参数列表的最后类型名称前面使用省略号“…”来表示声明一个变长函数,调用该函数的时候可以传递该类型任意数目的参数。

func 函数名(args ...Type) (返回值列表) {
    // 函数体
}

代码示例

我们在这里写三个函数,依次展示出函数最常态模样,多值返回和不定参数。

package main

import(
    "fmt"
)


func Add(i int, j int) (int) {  //常规函数
    return i+j
}
func Add_Multi_Sub(i, j int) (int, int, int) {  //多值返回
    return i+j, i*j, i-j
}

func sum(nums ...int) { //变参函数
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main(){
    a, b := 2,3
    arr := []int{1, 2, 3}
    var c int = Add(a,b)
    d,e,f := Add_Multi_Sub(a,b)
    fmt.Println(c,d,e,f)
    sum(arr...)  //注意传参形式

}
学习 Go(也称为 Golang)语言从入门到精通可以分为以下几个步骤: 1. **安装和环境设置**: - 官方下载 Go 的安装包并配置好 GOPATH(Go 工作路径),用于存放源码、依赖等。 2. **基础语法**: - 学习基本的数据类型(如 int, float, string 等)、变量声明、常量定义。 - 掌握流程控制结构(if-else, for, while, switch)和函数的定义与调用。 3. **模块管理**: - 使用 `go mod` 命令来管理和导入外部库(模块),了解如何编写和使用 `import` 和 `package` 关键字。 4. **并发编程**: - Go 强调并发,理解 Goroutines(轻量级线程)和 Channels(管道通信机制)的概念。 - 学习互斥锁(sync.Mutex)和通道选择器(select)等同步原语。 5. **标准库的探索**: - 熟悉标准库提供的常用功能,如 fmt (格式化)、io (输入/输出)、net (网络)、os (操作系统接口) 等。 6. **HTTP服务器与客户端**: - 学会使用 net/http 包创建简单的 HTTP 服务端和客户端。 7. **Web框架**: - 如果对 Web 开发感兴趣,可以尝试 Gin 或 Beego 这样的轻量级框架。 8. **错误处理与日志记录**: - 学习如何优雅地处理和捕获运行时错误,以及使用 logrus 或 zap 进行日志记录。 9. **项目实战**: - 通过实际项目练习,比如搭建简单的 RESTful API、数据处理工具或游戏后端。 10. **进阶主题**: - 对于高级开发者,可研究 goroutine 性能优化、内存管理(垃圾回收机制)、反射、接口和组合等概念。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值