函数是Go语言里面的核心设计,它通过func来声明,函数可以有一个或者多个参数,每个参数后面都要带有类型,通过“,”分隔,可以返回多个值,函数的格式为:
func funcName(input1 type1, input2 type2)(output1 type1, output2 type2){
//处理逻辑代码
//返回值
return value1, value2
}
返回值声明了两个变量output1和output2,如果不想声明也可以,但是要保留两个类型声明
如果只有一个返回值且不声明返回值变量,可以省略“包括返回值”的括号
如果没有返回值就直接省略最后的返回信息
一个实际应用函数的例子(用来计算最大值)
package main
import "fmt"
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
x := 3
y := 4
z := 5
max_xy := max(x, y) //调用函数 max(x, y)
max_xz := max(x, z)
fmt.Printf("max(%d,%d) = %d\n", x, y, max_xy)
fmt.Printf("max(%d,%d) = %d\n", x, z, max_xz)
fmt.Printf("max(%d,%d) = %d\n", y, z, max(y, z)) //直接调用
}
多个返回值
例子:
package main
import "fmt"
//返回A+B和A*B
func sub(A, B int) (int, int) {
return A + B, A * B
}
func main() {
x := 3
y := 4
xPLUSy, xTIMESy := sub(x, y) //调用函数 sub(x, y)
fmt.Printf("xPLUSy(%d,%d) = %d\n", x, y, xPLUSy)
fmt.Printf("xTIMESy(%d,%d) = %d\n", x, y, xTIMESy)
}
变参
Go语言支持变参,接受变参的函数有不定数量的参数,为了做到这一点,首先需要定义函数使其接受变参。
func myfunc(arg ...int) {}
arg ...int 告诉我们Go语言这个函数接受不定数量的参数。注意,这些参数的类型全部时int。在函数体中,变量arg时一个int的slice
for _, n := arg {
fmt.Printf("And the number is: %d\n", n)
}
传值与指针
函数的普通传值只是传值的copy,而实参不会变化,比如
package main
import "fmt"
func add(a int) int {
a = a + 1
return a
}
func main() {
x := 3
fmt.Printf("x = %d\n", x) //输出x=3
x1 := add(x) //调用函数
fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
fmt.Printf("x = %d\n", x) //继续输出x,应该为x=3
}
如果想真正的传 x 本身的话就需要指针了,变量在内存中是存放于一定的地址上,修改变量实际是修改变量地址处的内存。
例子
package main
import "fmt"
func add(a *int) int {
*a = *a + 1 //修改了a的值
return *a //返回新值
}
func main() {
x := 3
fmt.Printf("x = %d\n", x) //输出x=3
x1 := add(&x) //调用函数 传x的内存地址
fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
fmt.Printf("x = %d\n", x) //继续输出x,应该为x=4
}
这样就达到了修改x的目的。传指针的好处:可以使多个函数能操作同一个对象,可以传递体积大的结构体
defer延迟语句
当你进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露:
func ReadWrite() bool {
file.Open("file")
defer file.Close()
if failureX {
return false
}
if failureY {
return false
}
return true
}
如果有很多调用defer,那么defer采用后进先出模式
发布于:
http://www.golune.com/blog/content/c45ae5ed3c92d1277173d43fafba4a4b8652f
相关推荐
### Go语言函数详解 #### 一、函数的基本概念与作用 在Go语言中,函数是程序的基本构建单元之一,主要用于封装一系列的操作或计算步骤。它能够帮助开发者将复杂的任务分解成更小、更易于管理的部分。Go语言至少...
go语言 Go语言函数 defer与异常 Go语言数组 Go语言结构体 日期与时间 非类型安全指针 Go语言切片
html格式,带全文搜索. 在学习go的过程中需要查询各种资料和书籍 手册....包括以下书籍(html): go标准库文档 Go语言标准库 go指南 go_web编程 Go_基础教程 go语言圣经 Go入门指南 Go...Go 语言(Golang).pdf 学习go语言.pdf
linux命令行的go语言函数版本_gnetstat
第四节 Go 语言函数 21、函数的定义 22、Go 方法 63、实现游戏服务器日志函数 84、课后作业—难度: 95、深度分析塔防游戏关卡设计 106、微信公
Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...
Go语言,又称为Golang,是由Google公司开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike及Ken Thompson三位开发者设计,旨在提高软件的构建效率和可维护性,特别...
Go 语言,也被称为 Golang,是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计的一种静态类型的编程语言。它旨在提供高效的开发体验,同时保持简洁的语法和内置的并发支持。Go 语言在...
函数调用是Go语言中非常重要的一部分,函数调用规范是Go语言设计的核心之一。Go语言中函数调用可以分为两种:同步调用和异步调用。同步调用是指函数调用者等待函数返回结果,而异步调用是指函数调用者不等待函数返回...
Go语言函数 defer与异常 Go语言数组 Go语言结构体 日期与时间 非类型安全指针 Go语言切片 作业 Day04 重点知识回顾与答疑 Day05 字符串 Go语言Map Go语言接口 错误处理 空接口与类型断言 函数式编程 面向对象 面向...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发效率,同时保持程序的高性能和可靠性。Go语言的基础和函数是其核心特性,让我们...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言。它旨在提高编程效率,简化并发编程,并强调简洁的编程哲学。Go语言的设计受到了多门经典编程语言的影响,如C语言、...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。Go语言的设计目标是提高程序员的工作效率,它具有高表达力、简洁、清晰和高效的特性。Go语言的一个显著特点...
2. **函数与方法**:讲解Go语言的函数定义、参数传递和返回值,以及面向对象编程中的方法和接口。 3. **包与导入**:阐述Go语言的模块化设计,包括包的组织、导入选项以及如何使用标准库和其他外部包。 4. **并发...
Go语言还提供了内置的并发安全的类型和函数,比如sync包中的Mutex、WaitGroup等,这使得在多线程环境下进行数据同步和线程间通信变得安全和简单。 综上所述,Go语言学习笔记通常涵盖了语言的起源、设计哲学、语法...
Go语言,又称为Golang,是由Google公司推出的编程语言。其主要开发者包括肯·汤姆逊(Ken Thompson)、罗布·派克(Rob Pike)和罗伯特·格里泽默(Robert Griesemer)三位业界知名的大师级人物。以下是这三位开发者的简要...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。自2009年发布以来,Go语言因其简洁的语法、高效的性能以及对并发编程的良好支持,受到了广大开发者的欢迎...
Go语言,通常被称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它具有简洁、快速、安全和现代的特点。Go语言设计团队的初衷是为了让编程更加简单、高效,同时能够应对...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。本教程将深入讲解Go语言函数的基本概念和特性,包括函数的格式、定义、多返回值、`defer`、`panic` 和 `...
在Go语言的学习中,理解其基本数据类型、控制结构(如if、for、switch)、函数以及包的导入和导出是非常重要的。同时,掌握如何使用goroutine和channel实现并发编程,是成为Go语言开发者的关键技能。Go语言的工具链...