结构体中有map, 这个map默认nil初始化,无法赋值, 怎么解决?

type App struct {
    // 配置
    Config      *Config
    Controllers map[string]reflect.Value
    ---- 随时增加
}

app := new(APP), 因为Controllers是nil,所以无法操作了;

如何巧妙的避免这种问题, 我总不能如下:

    app := &App{
        Controllers:  make(map[string]reflect.Value),
    }

这种方案,不灵活, 结构体增减成员,  初始化的地方都要改.

求如何解决?

共 3 个回复


stevewang

自己实现一个构造函数

func NewApp() *App {
    return &App {
        Controllers:  make(map[string]reflect.Value),
    }
}
# 0

ssqq

map 初始化要么用 make, 要么用 map[key_type]value_type{}
直接这么写,不是初始化,这是 go 著名的一个坑

# 1

sryan

同一楼 自己写一个构造函数
另外直接new不是坑吧 熟悉c++都知道new只是分配内存和调用构造函数,内部指针还是要自己管理的

# 2