函数基本组成func 函数名 (请求参数) (返回值){函数体}
.
声明函数
普通声明函数
func blog(){
fmt.Print("hello")
}
带参数声明函数
相同类型的变量写法
// 传入是那个类型为int的值
func blogA (int,int,int){
fmt.Print("ok")
}
// 参数都a,b 都为int类型
func blogB(a,b,c int){
fmt.Print(a,b)
}
不同类型的写法
// 参数都a(int 类型),b(string类型)
func blogC(a int,b string){
fmt.Print(a,b)
}
带返回值声明函数
// 返回参数类型为string
func video() string {
return "QvBiLam"
}
// 返回类型为int和string
func videoA() (int,string) {
return 6,"QvBiLam"
}
// 返回变量
func videoB() (code int,msg string) {
code = 0
msg = "ok"
return
// 为了方便阅读建议写成 return code,msg 或 return 值1,值2
}
调用函数
直接调用
func setValue(int,string)(string,string){
return "hello","QvBiLam"
}
// 调用setValue函数
setValue(3,"oK")
调用并接受返回值
全部接受返回值
func setValue(int,string)(string,string){
return "hello","QvBiLam"
}
// 调用setValue函数
code,msg := setValue(3,"oK")
接受部分换回值 :在go中声明的变量必须要使用才可以,当接受的函数有两个返回值时候,只有其中一个值是有用的而另一个值没用的情况下可已使用_
来忽略变量.
/*
必传参数为int,string类型
返回值为2个string类型
*/
func setValue(int,string)(string,string){
return "hello","QvBiLam"
}
// 不需要传参,可以没有返回值的函数
func getValue(){
// 声明两个变量接受setValue的返回值
say,name := setValue(1,"A")
// 如果值想获取其中一个返回值可以使用 `_` 来忽略变量
_,name2 := setValue(2,"B")
fmt.Println(say,name)
fmt.Println(name2)
}
闭包函数
首先要理解闭包函数.func 方法名()func()返回类型
.解释就是func 方法名
的返回值是一个函数func() int
.而这个返回函数类型的返回值是int
.
示例
第一步创建自增闭包函数,功能为:计算从0开始自增1的结果并返回.第二部修改自增闭包函数.传入底数s(从几开始进行自增).闭包方法内传入自增值i.结果为s开始自增i.并返回结果.
1-1 创建闭包函数
// 计算自增
func Increment() func() int {
s := 0
return func() int{
s += 1
return s
}
}
1-2 调用闭包函数
func main() {
// 声明变量值为闭包函数
add := Increment()
// 调用3次结果为1,2,3
fmt.Println(add())
fmt.Println(add())
fmt.Println(add())
// 声明新变量为闭包函数
add1 := Increment()
// 调用3次记过为1,2
fmt.Println(add1())
fmt.Println(add1())
}
2-1 修改闭包函数
// 计算自增
func Increment(s int) func(i int) int {
return func(i int) int {
s += i
return s
}
}
2-2 修改调用闭包函数
func main() {
// 声明变量值为闭包函数
s1,i1:= 0,2
add := Increment(s1)
// 调用3次结果为2,4,6
fmt.Println(add(i1))
fmt.Println(add(i1))
fmt.Println(add(i1))
// 声明新变量为闭包函数
s2,i2:= 10,5
add1 := Increment(s2)
// 调用3次记过为15,20
fmt.Println(add1(i2))
fmt.Println(add1(i2))
}