golang使用graphviz
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的更多相关文章
- Go语言(golang)开源项目大全
转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析 ...
- [转]Go语言(golang)开源项目大全
内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑 ...
- golang 查看代码调用关系图
go-callvis 是github上一个开源项目,可以用来查看golang代码调用关系. 安装 安装graphviz $ brew install graphviz 安装go-callvis go ...
- Debugging golang programs
https://ttboj.wordpress.com/2016/02/15/debugging-golang-programs/ I’ve been writing a lot of golang ...
- 使用Golang进行性能分析(Profiling)
转自:http://www.cppblog.com/sunicdavy/archive/2015/04/11/210308.html 本文介绍游戏服务器的性能分析, web服务器性能分析不在本文分析范 ...
- golang 性能测试pprof
golang 性能测试包是位于 net/http 包下的 pprof,其相关介绍可以参看具体的 官方文档 有关 golang 性能测试使用特别简单,在 main 包中的引包位置直接引入: import ...
- golang 项目实战简明指南
原文地址 开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行 ...
- [golang]内存不断增长bytes.makeSlice
------------------------------------------ 2015.7月更新 后面发现这里其实有一个sb的问题,在于内存回收和释放. 每个http请求,都会带一个http. ...
- 为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息
pprof是个神马玩意儿? pprof - manual page for pprof (part of gperftools) 是gperftools工具的一部分 gperftools又是啥? Th ...
随机推荐
- 编码CODING
摘自(复制)于海燕博客: http://www.cnblogs.com/haiyan123/p/7230533.html 1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器 ...
- Mysql的Text和Blob的比较
MySQL存在text和blob: (1)相同 在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值,值被截 ...
- Windows 内核漏洞学习—空指针解引用
原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/w ...
- ACTIVEMQ监控项目admin队列详情中文乱码
一.使用ACTIVEMQ队列,传入ObjectMessage时,监控项目admin无法解析消息信息,需要将消息javabean打成jar放入lib文件夹中,重启ACTIVEMQ,注意javabean要 ...
- nginx代理websocket协议
以下是代码段.location /wsapp/ { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set ...
- AngularJS Directive 命名规则
使用规则 在HTML代码中,使用的是连接符的形式,下面我们对比看看命名和使用的对应字符串: 命名 使用 people people peopleList people-list peopleListA ...
- Java枚举源码分析
1.是一个范型类, 实现了Serializable和Comparable接口 2.只有两个成员变量:name.ordinal 3.枚举类隐含一个values函数,需通过反射调用才可获取枚举实例化对象列 ...
- (转)Python3.5——装饰器及应用详解
原文:https://blog.csdn.net/loveliuzz/article/details/77853346 Python3.5——装饰器及应用详解(下)----https://blog.c ...
- AT24Cxx学习笔记
AT24Cxx是E2PRom的一个系列: 存储空间大小:AT24C02——2Kbit(256Bytes).AT24C04——4Kbit(512Bytes).AT24C08——8Kbit(1024Byt ...
- WebService-01-使用jdk发布第一个WebService服务并调用
Webservice是SOAP+XML,SOAP是基于Http的,Http底层是Socket,先回顾一下Socket: Server: public class Server { public sta ...