sách gpt4 ăn đã đi

pointers - Go指针交换问题

In lại 作者:数据小太阳 更新时间:2023-10-29 03:09:28 26 4
mua khóa gpt4 giày nike

我正在尝试将指针交换为 Go 中的结构,在附加到它的函数中运行:

func ( config *Config ) ReLoadConfigFile( configPath string ) error {
if ( len( configPath ) > 0 ) {
newConfig := Config{};
err := newConfig.LoadFromFile( configPath );

//Swap the configs, ensuring to lock the config for the swap
if ( err == nil ) {
config.Lock.Lock( );
defer config.Lock.Unlock( );
config = &newConfig;
} khác {
errorString := "Unable To Reload Config At Path: " + configPath;
return fmt.Errorf( errorString );
}
} khác {
return fmt.Errorf( "No Config Given To Reload" );
}
return nil;

我在 config 和 newConfig 函数内部以及函数外部添加了一些打印,但是指针交换似乎没有正常工作,因为 config 和外部打印该函数仍然打印以前的版本,而不是 newConfig,据我所知,我也在更改指针。

我是 Go 的新手,只是为了检查我不会发疯我已经在 Cpp 中重新创建了同样的东西并且它有效:

int *Temp1 = NULL;
int Temp2 = 123456;

Temp1 = &Temp2;

它将使 Temp1 的值为 123456(Temp2 的数据)。有人可以让我知道我的 Go 代码哪里出错了吗?

Cảm ơn!

câu trả lời hay nhất

我建议将实际配置值放在 Cấu hình 结构上的一个字段中,该结构在锁下发生变异,而不是改变 Cấu hình 指针,因为当您遇到该方法的调用者仍将引用旧指针。

Ví dụ:

kiểu Config struct {
values map[string]interface{} // or whatever is appropriate for your config
lock sync.RWMutex
}

func (c *Config) Get(k string) (interface{}, bool) {
c.lock.RLock()
defer c.lock.RUnlock()
v, ok := c.values[k]
return v, ok
}

func (c *Config) Reload(path string) error {
newConfig, err := LoadFromFile(path)
nếu err != nil {
return err
}
c.lock.Lock()
defer c.lock.Unlock()
c.values = newConfig.values
trả về nil
}

关于pointers - Go指针交换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271525/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress