go 函数

函数

在 go 中,函数是一等公民

In programming language design, a first-class citizen (also type, object, entity, or value) in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, modified, and assigned to a variable.

普通函数

在 Go 语言中普通函数的定义格式为 func 函数名(出参),如下:

func callFuncA(x, y string) (s string, err error) {
	return x + y, nil
}

func main() {
	callFuncA("1", "2")
}

在示例代码中声明了一个函数名为 callFuncA 的方法,他只允许在包内调用,因此首字母为小写。
其具有两个入参,分别是 x 和 y,类型都为 string。而出参为变量 s 和 err,类型分别为 string 和 error。
另外在函数体内返回值时,也可以采用快捷返回的方式:

func callFuncA(x, y string) (s string, err error) {
	s = x + y
	return
}

在出参时所声明的变量名称,是可以应用到自身函数的。因此若直接执行 return 则会隐式返回已经声明的出参变量。

在函数定义时,其入参还支持可变参数的语法:

func callFuncA(x ...string) (s string, err error) {
	s = strings.Join(x, ",")
	return
}

func main() {
	fmt.Println(callFuncA("1", "2"))
}

在入参变量上声明为 x …string,则表示变量 x 是 string 类型的可变变量,能够在入参时传入多个 string 参数。

可变变量所传入的格式为切片(slice)类型。

匿名函数

Go 语言也默认支持匿名函数的声明,声明的方式与普通函数几乎一样:

func main() {
	s := func(x, y string) (s string, err error) {
		return x + y, nil
	}

	s("1", "2")
}

匿名函数可以在任意地方声明,且不需要定义函数名,如果在函数体后马上跟 () 则表示声明后立即执行:

func main() {
	s, _ := func(x, y string) (s string, err error) {
		return x + y, nil
	}("1", "2")
}

而在所有的函数类使用中,有一点非常重要,那就是函数变量作用域的理解:

func main() {
	x, y := "1", "2"
	s, _ := func() (s string, err error) {
		return x + y, nil
	}()
	fmt.Println(s)
}

结构方法

在结合结构体(struct)的方式下,可以声明归属于该结构体下的方法:

type T struct{}

func NewT() *T {
	return &T{}
}

func (t *T) callFuncA(x, y string) (s string, err error) {
	return x + y, nil
}

func main() {
	NewT().callFuncA("1", "2")
}

具体的函数的使用方法与普通函数一样,无其他区别。

内置函数

Go 语言本身有支持一些内置函数,这些内置函数的调用不需要引用第三方标准库。内置函数的作用是用于配合 Go 语言的常规使用,数量非常少。如下:

  • 用于获取某些类型的长度和容量:len、cap。
  • 用于创建并分配某些类型的内存:new、make。
  • 用于错误处理机制(异常恐慌、异常捕获):panic、recover。
  • 用于复制和新增切片(slice):copy、append。
  • 用于简单输出信息:print、println。
  • 用于处理复数:complex、real、imag。

相关推荐

  1. go 函数

    2024-07-10 20:40:02       23 阅读
  2. Go函数

    2024-07-10 20:40:02       20 阅读
  3. Go 语言函数

    2024-07-10 20:40:02       69 阅读
  4. Go 函数 可变参数

    2024-07-10 20:40:02       51 阅读
  5. Go 语言函数

    2024-07-10 20:40:02       27 阅读
  6. Go语言函数

    2024-07-10 20:40:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 20:40:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 20:40:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 20:40:02       45 阅读
  4. Python语言-面向对象

    2024-07-10 20:40:02       55 阅读

热门阅读

  1. 玩转springboot之springboot项目监测

    2024-07-10 20:40:02       24 阅读
  2. 【LeetCode】每日一题:跳跃游戏 II

    2024-07-10 20:40:02       19 阅读
  3. Python面试题: 如何在 Python 中实现一个线程池?

    2024-07-10 20:40:02       24 阅读
  4. js时间转成xx前

    2024-07-10 20:40:02       18 阅读
  5. stm32基本定时器

    2024-07-10 20:40:02       17 阅读
  6. Kithara常见问题解答

    2024-07-10 20:40:02       17 阅读
  7. 数学,LeetCode 3102. 最小化曼哈顿距离

    2024-07-10 20:40:02       22 阅读
  8. Linux C++ 044-设计模式简介

    2024-07-10 20:40:02       22 阅读
  9. ffmpeg frequently use commands

    2024-07-10 20:40:02       25 阅读