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 ...
随机推荐
- Restframework 频率throttle组件实例-3
频率逻辑: from rest_framework.throttling import BaseThrottle import time VISIT_RECORD={} class VisitThro ...
- TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件
1.composer安装: composer require phpoffice/phpspreadsheet 2.点击导出按钮,触发控制器里面的方法 wdjzdc() 3. 在控制中引入 use P ...
- ActiveMQ使用线程池实现消息的生产与消费
jar文件:spring3.1jar,以及 项目src路径下文件:config.properties 读取config.properties文件JAVA类: package com.lejob.lej ...
- HTML 遍历
HTML 遍历 HTML基本格式: 1.下行遍历: 属性 说明 contents 子节点的列表,将所有儿子节点存入列表 children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节 ...
- 无头结点的单链表(C语言)
1.单链表: 在顺序表中,用一组地址连续的存储单元来一次存放线性表的结点,因此结点的逻辑顺序与物理顺序是一致的.但链表却不同,链表是用一组任意的存储单元来存放 线性表的结点,这组存储单元可以是连续的, ...
- django.db.utils.InternalError: (1050, "Table 'tb_content' already exists")
在goods应用里面写了tb_content数据表的模型类(不该写在这里的),进行了数据迁移,还导入了数据. 在contents应用里也写了tb_content数据表的模型类(应该写在这里的), 解决 ...
- 基于CAS操作的非阻塞算法
非阻塞算法(non-blocking algorithms)定义 所谓非阻塞算法是相对于锁机制而言的,是指:一个线程的失败或挂起不应该引起另一个线程的失败或挂起的一种算法.一般是利用硬件 ...
- python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类
# coding=utf-8 """ #K-means """ import time ...
- ActiveMQ学习--001--ActiveMQ和消息中间件
一.ActiveMQ简介 1,ActiveMQ是什么 ActiveMQ是Apache推出的开源的,完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现的消息中间件(MOM) 2, ...
- ActiveRecord::Fixture::FormatError: ActiveRecord::Fixture::FormatError
环境:window 7+ruby2.33+rails5.0.. 该提示的意思是固件格式错误: 但是又没有提示是哪一行 非常蛋疼,我照成的原因居然是没有对齐,请看:(下面的activated_at没有和 ...