gpt4 book ai didi

go - 为什么我在其他函数中设置值的结构中的字段始终为零?

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:29 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Using a setter for a struct type does not work as anticipated

(2 个回答)



Property in Golang struct not getting modified

(2 个回答)



Struct variable not being updated

(1 个回答)


2年前关闭。




我在其他方法中为结构设置字段值。我断点, session 有一个值,但是当 getSession 时返回, session 为零。我感觉很失落。

像代码一样,newMongoUtil创建 MongoUtil ,以及 mu.getSessionMongoUtil.session如果是 nil,则为一个值

package mongo

import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"sync"
)

type MongoUtil struct {
DBURL string
DBName string
Collections map[string]string

session *mgo.Session
}

var once sync.Once
var instance *MongoUtil

func (mu MongoUtil) getSession() (err error){
// fmt.Println("%v",&mu)
if mu.session==nil{
var session *mgo.Session
session, err = mgo.Dial(mu.DBURL)
if err==nil {
mu.session = session
}
}

return
}

func GetInstance() *MongoUtil {
once.Do(func() {
instance = newMongoUtil()
})

return instance
}

func newMongoUtil() *MongoUtil {
var mu MongoUtil
mu.DBURL = "mongodb://127.0.0.1:27017"
mu.DBName = "blog"
mu.Collections = map[string]string{}

// fmt.Println("%v",&mu)
if mu.session == nil{
e := mu.getSession()
fmt.Println(e)
}

return &mu
}

最佳答案

即使在内部 getSession()您在 mu.session 上分配了新值, session 将始终为 nil如果从外部访问 getSession()功能。

这是因为 getSession()方法有 值(value)接收者 ,不是指针接收器。

尝试更改您的代码:

func (mu MongoUtil) getSession() (err error) {
// ...
}

到:

func (mu *MongoUtil) getSession() (err error) {
// ...
}

我建议带 a tour of go about methods with pointer receivers .

关于go - 为什么我在其他函数中设置值的结构中的字段始终为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57240224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com