Go问答 关于 go 数据类型的使用疑问

soitif · 2020年04月01日 · 最后由 h12 回复于 2020年04月02日 · 253 次阅读

用惯了 php 的数组实在有点不习惯 go 需要每个类型都要定义,比如原先 php 里有这么一个数组

$topMenu = [
            'info' => [
                'name' => '客户管理',
                'description' => '管理客户相关资料',
            ],
            'menu' => [
                [
                    'name' => '所有客户',
                    'url' => '/crm/company/index'
                    'icon' => 'list',
                ],
                [
                    'name' => '合作客户',
                    'url' => '/crm/company/index',
                    'icon' => 'eye',
                ],
            ],
            'add' => [
                [
                    'name' => '添加客户',
                    'url' => '/crm/company/add',
                ],
                [
                    'name' => '添加订单',
                    'url' => '/crm/order/add',
                ],
            ],
        ];

到 go 里面是否只能这么定义

type TopMenu struct {
    Info map[string]string `json:"info"`
    Menu []ListMenu        `json:"menu"`
    Add  []AddMenu         `json:"add"`
}

type ListMenu struct {
    Name string `json:"name"`
    Url  string `json:"url"`
    Icon string `json:"icon"`
}

type AddMenu struct {
    Name string `json:"name"`
    Url  string `json:"url"`
}

var topMenu = TopModule{
        Info: map[string]string{
            "name":        "首页",
            "description": "管理首页",
        },
        Menu: []ListMenu{
            ListMenu{
                Name: "全部客户",
                Url:  "/crm/company/index",
                Icon: "list",
            },
            ListMenu{
                Name: "合作客户",
                Url:  "/crm/company/index",
                Icon: "list",
            },
        },
        Add: []AddMenu{
            AddMenu{
                Name: "添加客户",
                Url:  "/crm/company/add",
            },
                        AddMenu{
                Name: "添加商机",
                Url:  "/crm/order/add",
            },
        },
    }

是不是只能这样去定义?还是有更简便的方法? 感觉看着好啰嗦啊

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

强类型的语言就是这样,先定义再使用

slice 或 map 元素是 struct 的,literal 元素类型可以省略,例如:里层的 ListMenu 和 AddMenu 可以省略。 参考:https://golang.org/ref/spec#Composite_literals (关键词 elide)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册