Java转Go初步学习(方法和接口篇)

本文介绍了Go语言中的方法和接口概念。方法可以有指针或值接收者,指针接收者允许修改接收者指向的值。接口是方法签名的集合,类型通过实现接口的所有方法来实现接口。接口值包含值和具体类型,nil接口值调用方法会引发运行时错误。文章还讨论了空接口、类型断言、类型选择和常见接口如`fmt.Stringer`和`error`的使用。
摘要由CSDN通过智能技术生成

最近面试成功了腾讯教育子公司。以后得从事Go语言开发相关工作啦,特此在这记录下Go基础学习。
参考链接: https://tour.go-zh.org/


方法

method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在func后面增加了一个receiver(也就是method所依从的主体)。【go语言函数不能重载,用方法可以实现】

Go 没有类。不过你可以为结构体类型定义方法

  • 方法就是一类带特殊的 接收者 参数的函数。
  • 方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间
type Vertex struct {
   
	X, Y float64
}
func (v Vertex) Abs() float64 {
   
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
// Abs 方法拥有一个名为 v,类型为 Vertex 的接收者。
func main() {
   
	v := Vertex{
   3, 4}
	fmt.Println(v.Abs())
}

// 现在这个 Abs 的写法就是个正常的函数,功能并没有什么变化。
func Abs(v Vertex) float64 {
   
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
   
	v := Vertex{
   3, 4}
	fmt.Println(Abs(v))
}

方法只是个带接收者参数的函数。

指针接收者

你可以为指针接收者声明方法。
对于某类型 T,接收者的类型可以用 *T 的文法。(此外,T 不能是像 *int 这样的指针。)
指针接收者的方法可以修改接收者指向的值(就像 Scale 在这做的)。由于方法经常需要修改它的接收者,指针接收者比值接收者更常用。
若使用值接收者,那么 Scale 方法会对原始 Vertex 值的副本进行操作。(对于函数的其它参数也是如此。)Scale 方法必须用指针接受者来更改 main 函数中声明的 Vertex 的值。

type Vertex struct {
   
	X, Y float64
}
func (v Vertex) Abs() float64 {
   
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
// 这里去掉*就变成了值接收者
func (v *Vertex) Scale(f float64) {
   
	v.X = v.X * f
	v.Y = v.Y * f
}
func main() {
   
	v := Vertex{
   3, 4}
	v.Scale(10)
	fmt.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值