graphviz的介绍请参考: http://www.cnblogs.com/ghj1976/p/4539788.html 

安装 graphviz

需要在 http://www.graphviz.org/Download_macos.php 下载对应操作系统的版本。

安装完成后,可以用 dot –V  命令查看安装的版本,确认安装

mac 下安装后,会有一个 Graphviz 的应用可以查看 *.gv 的文件, 如下图效果所示:

 

产生Graphviz 文件

用 Golang 产生Graphviz 文件的封装方法如下:

https://github.com/awalterschulze/gographviz 

 

我们使用它的范例代码如下:

package main

import (
    "fmt"
    "github.com/awalterschulze/gographviz"
)

func main() {
    graphAst, _ := gographviz.Parse([]byte(`digraph G{}`))
    graph := gographviz.NewGraph()
    gographviz.Analyse(graphAst, graph)
    graph.AddNode("G", "a", nil)
    graph.AddNode("G", "b", nil)
    graph.AddEdge("a", "b", true, nil)
    fmt.Println(graph.String())
}

执行效果如下面截图:

 

 

使用 dot 生成 png 的命令行如下:

dot 11.gv -T png -o 11.png

 

完整的 Go 代码如下:

 

package main

import (
    "bytes"
    "fmt"
    "github.com/awalterschulze/gographviz"
    "io/ioutil"
    "os/exec"
)

func main() {
    graphAst, _ := gographviz.Parse([]byte(`digraph G{}`))
    graph := gographviz.NewGraph()
    gographviz.Analyse(graphAst, graph)
    graph.AddNode("G", "a", nil)
    graph.AddNode("G", "b", nil)
    graph.AddEdge("a", "b", true, nil)
    fmt.Println(graph.String())

    // 输出文件
    ioutil.WriteFile("11.gv", []byte(graph.String()), 0666)

    // 产生图片
    system("dot 11.gv -T png -o 12.png")
}

//调用系统指令的方法,参数s 就是调用的shell命令
func system(s string) {
    cmd := exec.Command(`/bin/sh`, `-c`, s) //调用Command函数
    var out bytes.Buffer                    //缓冲字节

    cmd.Stdout = &out //标准输出
    err := cmd.Run()  //运行指令 ,做判断
    if err != nil {
        fmt.Println(err)
    }
    fmt.Printf("%s", out.String()) //输出执行结果
}

生成的效果图:

golang使用graphviz的更多相关文章

  1. Go语言(golang)开源项目大全

    转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析 ...

  2. [转]Go语言(golang)开源项目大全

    内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑 ...

  3. golang 查看代码调用关系图

    go-callvis 是github上一个开源项目,可以用来查看golang代码调用关系. 安装 安装graphviz $ brew install graphviz 安装go-callvis go ...

  4. Debugging golang programs

    https://ttboj.wordpress.com/2016/02/15/debugging-golang-programs/ I’ve been writing a lot of golang ...

  5. 使用Golang进行性能分析(Profiling)

    转自:http://www.cppblog.com/sunicdavy/archive/2015/04/11/210308.html 本文介绍游戏服务器的性能分析, web服务器性能分析不在本文分析范 ...

  6. golang 性能测试pprof

    golang 性能测试包是位于 net/http 包下的 pprof,其相关介绍可以参看具体的 官方文档 有关 golang 性能测试使用特别简单,在 main 包中的引包位置直接引入: import ...

  7. golang 项目实战简明指南

    原文地址 开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行 ...

  8. [golang]内存不断增长bytes.makeSlice

    ------------------------------------------ 2015.7月更新 后面发现这里其实有一个sb的问题,在于内存回收和释放. 每个http请求,都会带一个http. ...

  9. 为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息

    pprof是个神马玩意儿? pprof - manual page for pprof (part of gperftools) 是gperftools工具的一部分 gperftools又是啥? Th ...

随机推荐

  1. Day 32 网络编程

    一.网络协议基础篇 一台完整的计算机由硬件.系统.软件组成,具备这三个条件,计算机就可以运行,但是只能自己和自己玩.为了实现计算机和计算机间的连接,就需要借助互联网,如全世界人类交流将英语作为标准语言 ...

  2. PHP7 - 如何禁用Xdebug

    操作系统:Cent OS 7 什么是Xdebug?看它的官方网站介绍: https://xdebug.org/index.php 为什么要禁用呢?这是因为Composer,这两种工具有冲突,在使用Co ...

  3. sublime 把 tab 转成 4 个空格

    Preferences -> Settings-User {    "tab_size":4,    "translate_tabs_to_spaces" ...

  4. 恢复xfs文件系统superblock实验

    1. 创建一个XFS文件系统[root@localhost ~]# mkfs.xfs -f /dev/vdb1meta-data=/dev/vdb1              isize=256    ...

  5. linux查看防火墙状态及开启关闭命令

    存在以下两种方式: 一.service方式 查看防火墙状态: [root@centos6 ~]# service iptables status iptables:未运行防火墙. 开启防火墙: [ro ...

  6. 常见无线组网分析(NB-IOT组网和Mesh组网)

      NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...

  7. JAVA并发编程学习笔记------结构化并发应用程序

    1. Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程相当于消费者,如果要在程序中实现一个生产者-消费者的设计,最简单的方式通常就是使用Executor 2. Exe ...

  8. celery问题记录

    1. 问题:WARNING/MainProcess] /home/jihonghe/.virtualenvs/py3_dj217_env/lib/python3.6/site-packages/bil ...

  9. Vue-Router路由Vue-CLI脚手架和模块化开发 之 使用props替代路由对象的方式获取参数

    在上一章博文中使用路由对象$route获取参数时,组件和路由对象耦合,在这篇博文中就可以使用props来进行解耦: 1.在组件中使用props选项定义数据,接收参数: 2.在路由中,使用props选项 ...

  10. yolov3源码分析keras(一)数据的处理

    一.前言 本次分析的源码为大佬复现的keras版本,上一波地址:https://github.com/qqwweee/keras-yolo3 初步打算重点分析两部分,第一部分为数据,即分析图像如何做等 ...