共计 1733 个字符,预计需要花费 5 分钟才能阅读完成。
大家好,明天将梳理出的 Go 语言函数用法内容,分享给大家。请多多指教,谢谢。
本次《Go 语言函数应用》内容共分为三个章节,本文为第一章节。
- Golang 根底之函数应用 (一)
- Golang 根底之函数应用 (二)
- Golang 根底之函数应用 (三)
本章节内容
- 函数介绍
- 函数特点
- 函数申明
- 传参形式
- 不定参数传值
- 任意参数类型的不定参数
- 返回值
函数介绍
为了实现某一性能的程序指令(语句)的汇合,称为函数。
Go 语言的函数能够分为:自定义函数和零碎函数。Go 语言函数与其余语言函数最大的不同是,Go 语言的函数能够反对返回任意多个值,而其余语言的函数个别只反对返回一个值。
比方 C 语言函数返回值只能是一种类型。
Go 语言的函数也反对 一般函数、匿名函数和闭包 三种模式。
函数特点
- 无需申明原型
- 反对不定变参
- 反对多返回值
- 反对命名返回参数
- 反对匿名函数和闭包 (变向的高阶函数)
- 函数也是一种类型,一个函数能够赋值给变量
- 不反对嵌套 (nested) 一个包不能有两个名字一样的函数
- 不反对重载 (overload)
- 不反对默认参数 (default parameter)
函数申明
函数申明包含函数名、形式参数列表、返回值列表(可省略)以及函数体。
func name(parameter-list) (result-list) { // 申明函数名
// 函数体
}
如果函数返回一个无名变量或者没有返回值,返回值列表的括号是能够省略的。如果一个函数申明不包含返回值列表,那么函数体执行结束后,不会返回任何值。
传参形式
值传递
指在调用函数时将理论参数复制一份传递到函数中,这样在函数中如果对参数进行批改,将不会影响到理论参数。
func num(x, y int) int {// 解决逻辑}
援用传递
是指在调用函数时将理论参数的地址传递到函数中,那么在函数中对参数所进行的批改,将影响到理论参数。
func swap(x, y *int) {
var temp int
temp = *x /* 保留 x 的值 */
*x = *y /* 将 y 值赋给 x */
*y = temp /* 将 temp 值赋给 y*/
}
无论是值传递,还是援用传递,传递给函数的都是变量的正本,不过,值传递是值的拷贝。
援用传递是地址的拷贝,一般来说,地址拷贝更为高效。而值拷贝取决于拷贝的对象大小,对象越大,则性能越低。
map、slice、chan、指针、interface 默认以援用的形式传递。
不定参数传值
函数的参数不是固定,前面的类型是固定的。(可变参数)
golang 可变参数实质上就是 slice。
在参数赋值时能够不必一一的赋值,能够间接传递一个数组或者切片,留神在参数后加上 …
即可。
func myfunc(args ...int) {// 0 个或多个参数}
func add(a int, args ...int) int {// 1 个或多个参数}
func add(a int, b int, args ...int) int {// 2 个或多个参数}
其中 args 是一个 slice 类型,咱们能够通过
arg[index]
顺次拜访所有参数,通过len(arg)
来判断传递参数的个数。
应用 slice 对象做变参时,必须开展。
package main
import ("fmt")
func sum(s string, n ...int) string {
var x int
for _, i := range n {x += i}
return fmt.Sprintf(s, x) // 字符串拼接
}
func main() {s := []int{1, 2, 3}
res := sum("sum: %d", s...) // slice... 开展 slice
println(res)
}
输入后果
sum: 6
任意类型的不定参数
函数的参数和每个参数的类型都不是固定的。
用 interface{}
传递任意类型数据是 Go 语言的常规用法,而且 interface{}
的类型是平安的。
func myfunc(args ...interface{}){ // 示例用法
...
}
返回值
_
标识符,用来疏忽函数的某个返回值。
Go 的返回值能够被命名,返回值的名称该当具备肯定意义。
没有参数的 return 语句返回各个返回变量的以后值,这种用法被称作“裸”返回。
func myfunc(arg int) (arg int) { // 示例用法
return arg
}
技术文章继续更新,请大家多多关注呀~~
搜寻微信公众号【帽儿山的枪手】,关注我