function - 改变值(value)

标签 function pointers go

谁能告诉我如何改变 键入时钟

基本上,当我调用 New() 时,我得到输出 3:04 并且在调用 ADD() 函数后,我期望值是是 03:09。如果我分配 ADD() 函数调用的值,那么我将得到 03:09 作为输出。我想知道是否可以使用指针改变 type Clock 的值?

package main

import "fmt"

const testVersion = 4

type Clock int

func New(hour, minute int) Clock {
    result := (hour*60 + minute) % (24*60)
    if result < 0 {
        result = result + 24*60
    }

    return Clock(result)
}

func (c Clock) String() string {
    return fmt.Sprintf("%02v:%02v", int(c/60), int(c%60))
}

func (c Clock) Add(minutes int) Clock{
    newC:=New(0,minutes + int(c))
    //fmt.Println(a)
}

func main() {
    result := New(3, 4)
    fmt.Println(result)
    result.Add(5)
    fmt.Println(result)
}

最佳答案

是的,这是可能的。如果要修改该值,则必须在指针接收器上定义 Add 方法,例如

func (c *Clock) Add(minutes int) Clock{
    *c =New(0,minutes + int(*c))

    return *c
}

基本规则是:如果您要更改接收器值,请使用指针接收器(作为引用的 slicemap 除外)。查看以下资料以更好地理解方法接收器:

  1. 围棋之旅 Methods

  2. 常见问题解答:Should I define methods on values or pointers?

关于function - 改变值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44557109/

相关文章:

php - 对我的第一个项目 PHP 类的建议/建议

python-2.7 - Python ctypes : How to pass NULL as argument with format const char **

golang sql/数据库事务中准备好的语句

c++ - ERROR 函数问题。 C++

c - 为什么 Ideone.com C 编译器不捕获不匹配的指针类型?

c++ - std::vector::erase 是否使指针无效?

c++ - 如何初始化不同动态分配地址的 vector

postgresql - 如何从表 GORM 中获取工资列的总和

go - 如何将 row.Scan() int32 转换为 Golang gRPC protobuf Enum 字段?

bash - 一个正确的 "forward"如何在 bash 中运行参数?