golang 标准库间看重的可视化呈现葡京在线开户

供销社条件

数据准备

标准库各样包里面的相互关系,可以从来通过命令获取,然后简单转换为一个正经的
JSON 对象:

go list -json  std

以身作则输出:

{
    "Dir": "/usr/local/go/src/archive/tar",
    "ImportPath": "archive/tar",
    "Name": "tar",
    "Doc": "Package tar implements access to tar archives.",
    "Target": "/usr/local/go/pkg/darwin_amd64/archive/tar.a",
    "Goroot": true,
    "Standard": true,
    "StaleReason": "standard package in Go release distribution",
    "Root": "/usr/local/go",
    "GoFiles": [
        "common.go",
        "format.go",
        "reader.go",
        "stat_atimespec.go",
        "stat_unix.go",
        "strconv.go",
        "writer.go"
    ],
    "IgnoredGoFiles": [
        "stat_atim.go"
    ],
    "Imports": [
        "bytes",
        "errors",
        "fmt",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "sort",
        "strconv",
        "strings",
        "syscall",
        "time"
    ],
    "Deps": [
        "bytes",
        "errors",
        "fmt",
        "internal/cpu",
        "internal/poll",
        "internal/race",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "path/filepath",
        "reflect",
        "runtime",
        "runtime/internal/atomic",
        "runtime/internal/sys",
        "sort",
        "strconv",
        "strings",
        "sync",
        "sync/atomic",
        "syscall",
        "time",
        "unicode",
        "unicode/utf8",
        "unsafe"
    ],
    "TestGoFiles": [
        "reader_test.go",
        "strconv_test.go",
        "tar_test.go",
        "writer_test.go"
    ],
    "TestImports": [
        "bytes",
        "crypto/md5",
        "fmt",
        "internal/testenv",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "path/filepath",
        "reflect",
        "sort",
        "strings",
        "testing",
        "testing/iotest",
        "time"
    ],
    "XTestGoFiles": [
        "example_test.go"
    ],
    "XTestImports": [
        "archive/tar",
        "bytes",
        "fmt",
        "io",
        "log",
        "os"
    ]
}

梳理过的数据源,参见:
https://raw.githubusercontent.com/ios122/graph-go/master/data.js

其他

数据整理

哪怕把原来数据,处理成 echarts 需要的数码,这里大概说下最基本的思路:

  • echarts 展现相关的代码,很大程度上参照了
    graph-npm

  • 节点坐标和颜色,选取擅自坐标和颜料,以去除节点和包里面的联系.我觉着这么处理,能更纯粹地观测标准库包与包里面的联系.

  • 亟待一个 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

可视化原理

首要涉及一下内容:

  • 可视化显示,使用的是 echarts

  • 应用原来数据的 ImportPath 而不是
    Name,来作为每个数据节点的唯一id.这样是因为 golang
    本身的包命名规范控制的.

  • 接纳原有数据的 Imports
    字段,来规定正式库包与包里面的相互依赖关系.golang是不容许循环依赖的,所以有些循环往复倚重相关的问题,不需要考虑.

  • 节点的轻重缓急,和包被其他包引入的次数成正相关.这样做,被依赖越多的包,图上最终呈现时,就会越大.常用包和不常用包,一目了解.

葡京在线开户 2

简介

葡京在线开户 3

国庆看完 << Go 语言圣经
>>,总想做点什么,来强化下映像.以可视化的措施展示 golang
标准库之间的依赖,可能是一个相比较好的切入点.做事先,简单搜了下有关的情节,网上也要研商,不过没有察觉间接能拿过来用的.标准库之间,是早晚存在依靠关系的,不同库被依赖的水准必然是不均等的.但究竟有多大差别呢?

以下内容,数据源自真实环境的 golang 1.9
版本的科班库.所以,本文不仅是一篇可视化相关的座谈文章,更是提供了一个足以直接追究
golang 标准库间倚重关系的高速梳理工具.

是不是炒鸡心满意足的

连带链接

葡京在线开户 4

意义与源码

葡京在线开户 5

葡京在线开户 6

置放在进门大堂的机器

我拿,我放,我左,我左,我抿嘴

葡京在线开户 7

葡京在线开户 8

洋洋得意礼貌又认真的工作人员们

葡京在线开户 9

葡京在线开户 10

葡京在线开户 11

葡京在线开户 12

葡京在线开户 13

葡京在线开户 14

世上最大的星巴克(Buck)店于5日在香港瓜亚基尔西路标准开赛,建筑面积 达2700
多平米,和Alibaba人工智能实验室协作今后,用户可以由此 AR
技术讨论星Buck“从一颗咖啡生豆到一杯香醇咖啡”的故事,也可挑起“隐藏”的在线菜单查询效用,并透过
AR
技术直观了然咖啡吧台、冲煮器具等每一处细节。以下为今东瀛人去打卡拍摄(其实,早一点去,并从未传说中的那么三个人排队)

(完)

葡京在线开户 15

葡京在线开户 16

葡京在线开户 17

走向二楼

葡京在线开户 18

葡京在线开户 19

葡京在线开户 20

葡京在线开户 21

葡京在线开户 22

葡京在线开户 23

葡京在线开户 24

二楼布置与一楼大多,面积小了几许

葡京在线开户 25

葡京在线开户 26

葡京在线开户 27

池夕末20171207

12.12上周日本身在和讯上有一场畅游乐乎live供我们参考学习,内容将关乎到旅游产品预订,入行旅游业等享受,欢迎大家来收听~

葡京在线开户 28

葡京在线开户 29

葡京在线开户 30

葡京在线开户 31

葡京在线开户 32

葡京在线开户 33

葡京在线开户 34

第一张是自个儿最喜爱的一张

其次张次之

本身是不是有点“小私心”嘿嘿嘿

接下去便是条件与店内热情敬业的工作人士了

葡京在线开户 35

葡京在线开户 36

葡京在线开户 37

葡京在线开户 38

葡京在线开户 39

纯拍摄图少文字(本文图片未经许可严禁利用违者必究)

葡京在线开户 40

葡京在线开户 41

最后安利这位工作专门认真的小二哥,帅!

一楼

葡京在线开户 42

葡京在线开户 43

葡京在线开户 44

葡京在线开户 45