Go语言函数定义全攻略,这一篇就够了!

简介: Go语言函数定义全攻略,这一篇就够了!

/ Go 语言函数定义与声明详解 /

函数是组织代码的基本单元,Go 语言中函数的声明和定义有一些特殊的设计。本文将详细介绍 Go 语言函数定义和声明的相关用法。

1

 

一、函数定义

定义一个函数的基本语法:

func functionName(input1 type1, input2 type2) (output1 type1, output2 type2) {
  // 函数体实现
  // 返回多个值
  return value1, value2 
}

函数定义包含函数名、参数列表、返回值列表和函数体。

2

 

二、参数定义

函数可以定义多种类型的形参:

func sum(numbers []int) int {
  // 求和算法
  return sum
}

参数可以为数组、切片、map、结构体等任意类型。

3

 

三、多返回值

Go 语言函数可以返回多个值:

func sumAndProduct(numbers []int) (int, int) {
  sum := 0 
  product := 1
  // 计算过程
  return sum, product
}

返回值可以命名,并在函数体直接返回。

4

 

四、命名返回值

返回值列表可以命名,然后直接使用这些变量:

func sum(nums []int) (s int) {
  // 使用返回值变量s
  for _, n := range nums {
    s += n
  }
  return
}

return 时可以不必写返回值变量名。

5

 

五、匿名函数

可以使用函数字面量定义匿名函数:

func(input1 type1, input2 type2) (output1 type1, output2 type2) {
  // 匿名函数体
}

一般会将匿名函数保存到变量中使用。

6

 

六、方法

Go 语言中的方法实际上也是函数:

type User struct {
  Id int
  Name string
}
func (user *User) Greet() {
  fmt.Printf("Hello %s", user.Name)
}

方法需要定义接收者,指明方法属于哪个类型。

7

 

七、函数指针

函数也是一种类型,可以取地址得到函数指针:

func sum(numbers []int) int {
  // 求和 
}
var sumFunc = sum // 函数值
var sumPtr = &sum // 函数指针

函数指针可以支持回调模式。

8

 

八、类型定义

可以使用 type 定义函数类型别名:

type SumFunc func([]int) int
func main() {
  var f SumFunc 
  f = sum
  fmt.Println(f([]int{1, 2})) // 类似函数指针
}

函数类型与函数指针类似,可以作为回调使用。

9

 

九、闭包函数

Go 支持闭包的函数定义:

func adder() func(int) int {
  sum := 0
  return func(x int) int {
    sum += x
    return sum
  }
}

闭包函数可以构成状态机、累加器等模型。

10

 

十、 defer

defer 可以推迟函数执行到外层返回之前:

func readFile() error {
  f, err := os.Open() 
  if err != nil {
    return err
  }
  defer f.Close() // 函数结束前关闭
  // 处理文件
} 

defer 经常用于资源清理、错误处理等场景。

以上内容详细介绍了 Go 语言中函数的声明、定义、语法特性等用法,可以帮助大家全面理解 Go 语言函数的设计。


目录
相关文章
|
3月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
233 1
|
5月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
319 1
|
5月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
413 0
|
5月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
274 0
|
5月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
254 0
|
5月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
349 0
|
5月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
5月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
6月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
6月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
447 0