Go函数知识

1.函数格式
func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {
//这里是处理逻辑代码
//返回多个值
return value1, value2
}
示例:
func max(a, b int) int {
if a > b {
return a
}
return b
}

2.多个返回值
func add(a, b int) (int,int) {
return a,a+b
}

3.参数个数不确定

func add(t ... int) (r int) {
for _, n := range t {
r+=n
fmt.Printf("And the number is: %d\n", n)
}
return
}

4.值传递和指针传递
值传递
func add(a int) int {
a=a+1
return a
}
func main() {
a:=1
b:=add(a)
fmt.Println(a)
fmt.Println(b)
}

指针传递
func add(a *int) int {
*a=*a+1
return *a
}
func main() {
a:=1
b:=add(&a)
fmt.Println(a)
fmt.Println(b)
}

5.defer
如果有很多调用defer,那么defer是采用后进先出模式可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回

6.函数作为类型
type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])
备注:定义为typeName类型的函数当做值来传递

7.panic和recover

func badCall() {
panic("bad end")
}

func test() {
defer func() {
if e := recover(); e != nil {
fmt.Printf("Panicing %s\r\n", e)
}
}()
badCall()
fmt.Printf("After bad call\r\n") // <-- wordt niet bereikt
}

func main() {
fmt.Printf("Calling test\r\n")
test()
fmt.Printf("Test completed\r\n")
}

8.main和init
点操作:你可以省略前缀的包名,也就是前面你调用的fmt.Println("hello world")可以省略的写成Println("hello world")
别名操作:别名操作的话调用包函数时前缀变成了我们的前缀
_空操作:别名操作的话调用包函数时前缀变成了我们的前缀




Bookmark the permalink.

Comments are closed.