go语言的函数、方法、接口

一、函数

Go 语言函数定义格式如下:

func function_name( [parameter list] ) [return_types] {函数体
}

函数定义解析:

  • func:函数由 func 开始声明
  • function_name:函数名称,参数列表和返回值类型构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 函数体:函数定义的代码集合。
//例子
func PrintInt(a int) int {fmt.Println(a)return 0
}

二、方法

· Go中没有类,但是可以为结构体定义方法,方法就是一类带有特殊的接收者参数的函数。方法接收者在它自己的参数列表内,位于func关键字和 方法名之间

· 接收者可以是struct, interface,自定义的任意类型。但接收者声明必须在同一个包内,非内建类型。

  方法和函数长得差不多,区别是方法定义时func关键字后面紧跟的是括号,括号里面是调用者形参及调用者类型,之后才是func_name,再之后是括号,括号里面是入参形参及入参类型(没有入参的情况下括号不可以省略),最后是出参类型,如果有多个出参,则出参类型要用括号括住。

func (variable_name variable_data_type) func_name()(return_type){/*函数体*/
}

下面这个解释容易理解

方法和函数的最大区别是方法有接收者(从属),即方法都是有主人的。方法的使用方法如下:

//模板
func (主人名 类型)方法名(参数列表)(返回值列表){doSomething
}

例子

package mainimport ("fmt"
)
//构造Animal结构体,即主人类型
type Animal struct{} //Animal类型的主人an,有一个Run方法,
//这里是值接收,也可以使用指针接收
func (an Animal)Run(a int) int {fmt.Println("Run ",a)return 0
}
func main() {var an Animal //声明主人an.Run(1)     //主人调用方法
}

三、接口

和int,string等一样,接口也是一种类型,和struct类似;区别是struct中存放各种属性,而接口中存放各种方法的声明。另外有几点需要注意:

1、接口内的方法数可以为0,即空接口;默认所有对象都实现了空接口;

2、同一个接口内所有的方法都被实现后,该接口才能被正常使用;例如下方的run和eat方法都需要被实现;

3、建议将相同的行为放在同一个接口内,例如下方的Eat接口,通过绑定到不同的对象上实现多态

package mainimport ("fmt"
)
/*
type Eat interface{eat() int
}
*//*接口是一种类型,和struct类似,
包含n个方法,其中n>=0*/
type Action interface{ //模板 方法名() 返回类型  run() inteat() int
}type NullInterface interface{} //空接口type Human struct{weight float32 //属性name   string
}func (h Human) run() int{ //实现方法fmt.Println(h.name,"run run run")return 0
}func (h Human) eat() int{ //实现方法fmt.Println(h.name,"eat eat eat")return 0
}func main() {//使用方法/*空接口可以接受任意类型,故可以赋值string,struct等其他类型*/var n NullInterface = 1 fmt.Println("null interface", n)/*理解接口:接口类似工厂,我们希望生成一个工具箱(Human),它的相关参数是120.0和Bob;我们将生产需求下单给工厂Action,工厂Action生产了一个名字为act的工具箱,里面包含run和eat两种工具*/var act Action = Human{120, "Bob"}fmt.Println("hello", act)act.run()act.eat()
}

运行结果

null interface 1
hello {120 Bob}
Bob run run run
Bob eat eat eat


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部