go 结构的方法总结

Posted songhuan999999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 结构的方法总结相关的知识,希望对你有一定的参考价值。

方法可以与命名类型或命名类型的指针关联。

刚刚看到的两个 Abs 方法。一个是在 *Vertex 指针类型上,而另一个在 MyFloat 值类型上。 有两个原因需要使用指针接收者。首先避免在每个方法调用中拷贝值(如果值类型是大的结构体的话会更有效率)。其次,方法可以修改接收者指向的值。

尝试修改 Abs 的定义,同时 Scale 方法使用 Vertex 代替 *Vertex 作为接收者。

当 v 是 Vertex 的时候 Scale 方法没有任何作用。`Scale` 修改 `v`。当 v 是一个值(非指针),方法看到的是 Vertex 的副本,并且无法修改原始值。

Abs 的工作方式是一样的。只不过,仅仅读取 `v`。所以读取的是原始值(通过指针)还是那个值的副本并没有关系。

package main

import (
    "fmt"
    "math"
)

type Vertex struct
    X, Y float64

func (v *Vertex) Scale(f float64)
    v.X = v.X * f
    v.Y = v.Y * f

func (v *Vertex) Abs() float64
    return math.Sqrt(v.X*v.X + v.Y*v.Y)

func main()
    v := &Vertex3, 4
    v.Scale(5)
    fmt.Println(v, v.Abs())

以上是关于go 结构的方法总结的主要内容,如果未能解决你的问题,请参考以下文章

Go结构体方法

go接口

Go 语言学习总结—— 大厂 Go 编程规范总结

Go 语言学习总结—— 大厂 Go 编程规范总结

Go的接口总结

设计模式-工厂方法模式(Go实现)