设为首页 加入收藏

TOP

golang 标准库间依赖的可视化展示(二)
2017-10-09 08:55:35 】 浏览:2347
Tags:golang 标准 依赖 可视化 展示
颜色,采用随机坐标和颜色,以去除节点和包之间的联系.我认为这样处理,能更纯粹地观察标准库包与包之间的联系.

  • 需要一个 edges 来记录包与包之间的依赖关系.在每次遍历 Imports 时,动态写入.

  • 需要一个 nodes 来记录包自身的一些信息,但是其 size 参数,需要计算过所有依赖关系后再填入.

  • 使用 nodedSize 来记录每个包被依赖的次数,为了提升效率,它是一个字典Map.

  •  /* 将原始数据,转换为图标友好的数据. 
     ImportPath 作为唯一 id 和 标签;
     Imports 用于计算依赖关系;
     节点的大小,取决于被依赖的次数;
     */
    function transData(datas){
        /* 存储依赖路径信息. */
        let edges = []
    
        /* 存储基础节点信息. */
        let nodes = []
    
        /* 节点尺寸.初始是1, 每被引入一次再加1. */
        let nodedSize = {}
    
        /* 尺寸单位1. */
        let unitSize = 1.5
    
        datas.map((data)=>{
            let itemId = data.ImportPath
    
            nodes.push({
                "label": itemId,
                "attributes": {},
                "id": itemId,
                "size": 1
            })
    
            if(data.Imports){
                data.Imports.map((importItem)=>{
                    edges.push({
                        "sourceID": importItem,
                        "attributes": {},
                        "targetID": itemId,
                        "size": unitSize
                    })
    
                    if(nodedSize[importItem]){
                        nodedSize[importItem] = nodedSize[importItem] + unitSize
                    }else{
                        nodedSize[importItem] = unitSize
                    }
                })
            }
        })
    
        /* 尺寸数据合并到节点上. */
        nodes.map((item)=>{
            let itemId = item.id
            if(nodedSize[itemId]){
                item.size = nodedSize[itemId]
            }
        })
    
        return {
            nodes,edges
        }
    }

    效果与源码

    相关链接

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇Go语言备忘录:反射的原理与使用.. 下一篇go语言之并发

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目