尝试在结构中使用golang实现OOPS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试在结构中使用golang实现OOPS相关的知识,希望对你有一定的参考价值。

我试图保留结构的统计数据。我想要做的是使用NewGolang创建一个结构并增加计数器,但所有输出都是1.我期待1,2,3。有人可以解释一下。

package main

import "fmt"

type Golang struct {
    SessionCounter int
}

func NewGolang() *Golang {
    return &Golang{
            SessionCounter: 0,
    }
}

func (g Golang) increaseCounter() {
    g.SessionCounter++
    fmt.Println(g.SessionCounter)
}

func main() {
    obj := NewGolang()
    obj.increaseCounter()
    obj.increaseCounter()
    obj.increaseCounter()
}

输出:

 1
 1 
 1

预计:1 2 3

答案

当您运行没有指针的方法时,您复制结构数据,当使用poiner时,您更改原始数据。

另一答案

func (g Golang) increaseCounter()改为func (g *Golang) increaseCounter()。您需要指针接收器来更改结构内的数据。

以上是关于尝试在结构中使用golang实现OOPS的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现简单的 Web 服务器

代码片段 - Golang 实现集合操作

golang代码片段(摘抄)

golang goroutine例子[golang并发代码片段]

无法在虚拟地址处理内核分页请求 - 内核OOPS

Golang 不能用作类型结构数组或切片文字