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 alias

import "strconv"

type Fuck func(int, int) string

func FuckFunc(a int, b int) string {
	return strconv.Itoa(a + b)
}
package main

import (
	"./alias"
	"fmt"
)

func main() {
	var testFunc alias.Fuck = alias.FuckFunc
	fmt.Println(testFunc(1, 2))
}

匿名函数

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

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 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值