Go基础学习记录 - Go指南 - 选择值或指针作为接收者

{app.params.name}}{app.params.name}}{app.params.name}}

环境

go version go1.10.1 darwin/amd64

选择值或指针作为接收者


使用指针接收者的原因有二:

首先,方法能够修改其接收者指向的值。

其次,这样可以避免在每次调用方法时复制该值。若值的类型为大型结构体时,这样做会更加高效。

下面看下面的代码演示

package main

import (
    "fmt"
)

// Rectangle 长方形
type Rectangle struct {
    width, height float64
}

// Area Rectangle的面积
func (v *Rectangle) Area() float64 {
    return v.width * v.height
}

// Scale 用给定的值调整比例
func (v *Rectangle) Scale(f float64) {
    v.width = v.width * f
    v.height = v.height * f
}

func main() {
    v := &Rectangle{3, 4}
    fmt.Printf("调整比例之前 : %+v, Area: %v\n", v, v.Area())
    v.Scale(5)
    fmt.Printf("调整比例之后 : %+v, Area: %v\n", v, v.Area())
}


运行后得到的结果如下

调整比例之前 : &{width:3 height:4}, Area: 12
调整比例之后 : &{width:15 height:20}, Area: 300

在实例中, Scale 和 Area 接收者的类型为 *Rectangle ,即便 Area 并不需要修改其接收者。

通常来说,所有给定类型的方法都应该有值或指针接收者,但并不应该二者混用。

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/25



版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/25