Go语言第十课 函数与方法

关于函数

函数定义

func 函数名(形参列表) (返回参数列表){

    函数体

}

如果函数没有返回值,返回参数列表可以省略。

Go里面没有“形参默认值”一说。

Go里面有些没有函数体的函数,这说明这个函数不是Go实现的,可能是其他语言实现的。

关于返回值

Go里面一个函数可以返回多值,这是比较特殊的地方。

当函数的某个返回值不被关注时,可以用“_”忽略它。

函数值

这个概念跟C里面的函数指针很像。Go认为函数也是一种值,也是可以传递的。使用函数值时,要注意一下几点:

· 函数值的“默认零值”是nil

· 函数值之间是不可比的

· 函数值不能作为map的key

示例代码

package main

import (
	"fmt"
	"reflect"
)

func add_int(a, b int) (c int) {
	return a + b
}

func main() {
	fmt.Println(reflect.TypeOf(add_int))
	var func_add func(int, int) int = add_int
	result := func_add(1, 2)
	fmt.Println(result)
}

结果

func(int, int) int

3

匿名函数

带函数名的函数都是包级元素,实际上函数内部还可以使用匿名函数。所谓匿名函数就是没有函数名的函数,由于没有函数名指定匿名函数不可能是包级元素。

package main

import "fmt"

func main() {
	add := func(a, b int) int {
		return a + b
	}
	result := add(1, 2)
	fmt.Println(result)

	result = func(a, b int) int {
		return a - b
	}(1, 2)
	fmt.Println(result)
}
3
-1

关于方法

将函数绑定到类型上就是这个类型的方法。实际上这是Go对OOP独(ai)特(mei)的支持。

方法声明

func (值 类型) 方法名 (形参列表) (返回值列表){

    方法体

}

package main

import "fmt"

type persion struct {
	name string
	age  uint
}

func (p persion) sayHello() string {
	return p.name + " says: hello \n"
}

func (p_ptr *persion) sayFuck() string {
	return p_ptr.name + " says: fuck \n"
}

func main() {
	yong := persion{name: "thinking", age: 27}
	fmt.Print(yong.sayHello())
	fmt.Print(yong.sayFuck())

	p_yong := &yong
	fmt.Print(p_yong.sayFuck())
}

thinking says: hello 
thinking says: fuck 
thinking says: fuck 


猜你喜欢

转载自blog.csdn.net/yongyu_it/article/details/80701547