文章目录
函数分类没有参数, 没有返回值有参数, 没有返回值有返回值未知参数数量多返回值
函数的作用域函数的进阶参数为函数匿名函数闭包闭包的练习
函数分类
没有参数, 没有返回值
func a() {}
有参数, 没有返回值
func b(a
int, b
string) {}
func c(a
, b
string) {}
有返回值
func d(a
int, b
int) (ret
int) {
ret
= a
+ b
return
}
func e(a
int) int {
return 1
}
未知参数数量
func cal(a
...int) int {
ret
:= 0
for _,v
:= range a
{
ret
+= v
}
return ret
}
func cal2(a
int, b
...int) int {
ret
:= a
for _,v
:= range b
{
ret
+= v
}
}
多返回值
func cal(a
, b
, int) (int, int) {
sum
:= a
+b
sub
:= a
-b
return sum
, sub
}
函数的作用域
package main
import "fmt"
var a
= 100
var b
= 99
func funcA() {
a
:= 101
fmt
.Println(a
, b
)
}
func main() {
funcA()
}
函数的进阶
参数为函数
package main
import "fmt"
func sum(x
, y
int) int {
return x
+ y
}
func sub(x
, y
int) int {
return x
- y
}
func cal(x
, y
int, z
func(int, int) int) int {
return z(x
, y
)
}
func main() {
ret1
:= cal(1, 2, sum
)
fmt
.Println(ret1
)
ret2
:= cal(2, 1, sub
)
fmt
.Println(ret2
)
}
匿名函数
noneFunc
:= func() {
fmt
.Println("noneFunc")
}
noneFunc()
func() {
fmt
.Println("noneFunc")
}()
闭包
package main
func a(name
string) func() {
return func() {
fmt
.Println("hello", name
)
}
}
func main() {
a("Tim")()
r
:= a("Tim")
r()
}
闭包的练习
package main
import (
"fmt"
"strings"
)
func check(filename
, suffix
string) string {
if !strings
.HasSuffix(filename
, suffix
) {
filename
= filename
+ ".txt"
}
return filename
}
func check1(filename
, suffix
string) func() string {
return func() string {
if !strings
.HasSuffix(filename
, suffix
) {
filename
= filename
+ ".txt"
}
return filename
}
}
func main() {
fmt
.Println(check("at", "txt"))
fmt
.Println(check1("abc", ".txt")())
}