// Layout runs the dot program to layout the graph. // If format is "" uses dot format, else specify an output renderer, e.g. "svg". // The Graphviz dot program must be installed in your path. func Layout(graph *gv.Graph, format string) ([]byte, error) { f, err := ioutil.TempFile("", "gogp") if err != nil { return nil, err } // write to tmpfile w := bufio.NewWriter(f) fmt.Fprint(w, graph.String()) w.Flush() f.Close() file := f.Name() defer os.Remove(file) // process with dot args := []string{file} if format != "" { args = append(args, "-T"+format) } var outData, errData bytes.Buffer cmd := exec.Command("dot", args...) cmd.Stdout = &outData cmd.Stderr = &errData if err := cmd.Run(); err != nil { if errData.Len() > 0 { err = errors.New(errData.String()) } return nil, err } return outData.Bytes(), nil }