go语言怎么设置只读变量

gonglf · 2021-12-02 16:56:56 · 3240 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-12-02 16:56:56 的主题,其中的信息可能已经有所发展或是发生改变。

概述

服务程序从yaml文件加载配置后解析为struct类型,保存在全局变量中。

问题

功能模块获取配置时,只需调用全局变量,但是某个模块如果不小心改了全局变量会导致其它模块受到影响

需求

变量设置为只读,不可更改,保证其它模块获取到的还是原始yaml文件里的内容。

请问怎么实现呢?在此谢过


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3240 次点击  ∙  1 赞  
加入收藏 微博
13 回复  |  直到 2022-02-26 21:12:05
liangmanlin
liangmanlin · #1 · 3年之前

封装成读取方法

wuchenghui
wuchenghui · #2 · 3年之前

加个读写锁,然后获取一个读锁,不释放

gonglf
gonglf · #3 · 3年之前

@liangmanlin 如果读取是一个切片活着map呢

gonglf
gonglf · #4 · 3年之前

@liangmanlin 我也是封装了,但是就是对切片和mao不生效

jarlyyn
jarlyyn · #5 · 3年之前
gonglfgonglf #3 回复

@liangmanlin 如果读取是一个切片活着map呢

clone出去啊

liangmanlin
liangmanlin · #6 · 3年之前

map和slice返回一个reader,调用者只能调用reader去读取里面的数值

liangmanlin
liangmanlin · #7 · 3年之前
gonglfgonglf #3 回复

@liangmanlin 如果读取是一个切片活着map呢

如上

gonglf
gonglf · #8 · 3年之前
liangmanlinliangmanlin #6 回复

map和slice返回一个reader,调用者只能调用reader去读取里面的数值

  • reader是自己封装的方法吗?还是golang的某个包,有代码吗看看吗?
  • 下面是我封装的方法
  • g_Function是那个全局变量
func GetShopGoods() []public.ShopGoodInfo {
    return g_Function.ShopConf.ShopGoods
}
zdf123456
zdf123456 · #9 · 3年之前

用interface去承接这个全局变量类型,然后提供对应的只读方法,修改就不加了

alan3
alan3 · #10 · 3年之前

用闭包,读取函数局部变量

lysShub
lysShub · #11 · 3年之前

type Config struct{ config }

func (c *Config)GetXxxx()xx{ return c.xxx }

ws1992go
ws1992go · #12 · 3年之前

不想变的设置为常量呗。偷懒总会造成意想不到的结果。

evlic
evlic · #13 · 3年之前
ws1992gows1992go #12 回复

不想变的设置为常量呗。偷懒总会造成意想不到的结果。

有没有可能 对象不允许用 const 声明

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传