有关map[string]interface{}用法求教

DevinL · 2023-08-05 11:19:14 · 1726 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-08-05 11:19:14 的主题,其中的信息可能已经有所发展或是发生改变。

代码如下,想问下最后一个语句怎么理解?

type Domain_list_t map[string]interface{}

var DomainList Domain_list_t

//DomainList.txt 文件存放域名列表,一行一个
func LoadOrCreateDomainList() bool {
    buf, err := ioutil.ReadFile("./Domainlist.txt")
    if err != nil {
        return false
    }

    DomainList = make(Domain_list_t)

    //domain为Domainlist.txt里的一行,假设是第一行是 www.baidu.com
    for _, domain := range strings.Split(string(buf), "\n") {
        //subs为domain的各级域名组成的切片 {www,baidu,com}
        subs := strings.Split(strings.Trim(domain, "\r "), ".")
        if len(subs) == 0 || len(domain) == 0 || domain[0] == '#' {
            continue
        }

        top := DomainList

        //i=2时
        for i := len(subs) - 1; i >= 0; i-- {
            //sub[2]="com",top["com"]==nil
            if top[subs[i]] == nil {
                //初始化top["com"]
                top[subs[i]] = make(Domain_list_t)
            }

            if i == 0 {
                top[subs[0]].(Domain_list_t)["_"] = true
            }

            //这里不明白,为啥 top["com"] 后面还能加点号,为啥 Domain_list_t 要加括号
            top = top[subs[i]].(Domain_list_t)
        }
    }

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

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

1726 次点击  
加入收藏 微博
3 回复  |  直到 2023-08-07 12:30:52
1425113841
1425113841 · #1 · 2年之前

top = top[subs[i]].(Domain_list_t)

最左边的top类型是: Domain_list_t, 因为top := DomainList 也因为DomainList的值类型是interface, interface是不能直接赋值到类型为DomainList的top 所以需要将interface类型断言为DomainList, 然后再赋值给top

DevinL
DevinL · #2 · 2年之前
14251138411425113841 #1 回复

top = top[subs[i]].(Domain_list_t) 最左边的top类型是: Domain_list_t, 因为top := DomainList 也因为DomainList的值类型是interface, interface是不能直接赋值到类型为DomainList的top 所以需要将interface类型断言为DomainList, 然后再赋值给top

简洁明了,感谢!

跑了一下代码,效果其实就是map嵌套map😂

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