Home

Awesome

go-plantuml

Build Status Go Report Card go-recipes

go-plantuml generates plantuml diagrams from go source files or directories. It supports generic fields.

Installation

go install github.com/bykof/go-plantuml@latest

Please consider that $GOPATH/bin should be on our $PATH.

Usage

Generate plantuml diagrams from go sources

Usage:
  go-plantuml [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  generate    Generate a plantuml diagram from given paths
  help        Help about any command

Flags:
  -h, --help     help for go-plantuml
  -t, --toggle   Help message for toggle

Use "go-plantuml [command] --help" for more information about a command.
Generate a plantuml diagram from given paths

Usage:
  go-plantuml generate [flags]

Flags:
  -d, --directories strings   the go source directories (default [.])
  -x, --exclude string        exclude file matching given regex expression, not used if using -f flag
  -f, --files strings         the go source files
  -h, --help                  help for generate
  -l, --left-to-right         display the UML diagram left to right (default: top to bottom)
  -o, --out string            the graphfile (default "graph.puml")
  -r, --recursive             traverse the given directories recursively

Example

For example we have to files in the directory test.

// address.go
package models

import "fmt"

var (
	EmptyVariable, AnotherEmptyVariable string
	A, B                                = "1", 2
	PackageVariable                     = "Teststreet"
	AnotherPackageVariable              = "Anotherteststreet"
)

const (
	StartingStreetNumber = 1
)

type (
	AddressLike interface {
		FullAddress(withPostalCode bool) string
	}

	Address struct {
		A, B          string
		Street        string
		City          string
		PostalCode    string
		Country       string
		CustomChannel chan string
		AnInterface   *interface{}
	}
)

func (address Address) FullAddress(withPostalCode bool) string {
	return fmt.Sprintf(
		"%s %s %d",
		PackageVariable,
		AnotherPackageVariable,
		StartingStreetNumber,
	)
}

// user.go
package models

import "github.com/bykof/go-plantuml/test/address/models"

type (
	User struct {
		FirstName      string
		LastName       string
		Age            uint8
		Address        *models.Address
		privateAddress models.Address
	}
)

func (user *User) SetFirstName(firstName string) {
	user.FirstName = firstName
}

func PackageFunction() string {
	return "Hello World"
}

Then we run go-plantuml generate or go-plantuml generate -d . -o graph.puml.

This will create a graph.puml file and check for .go files inside your current directory.

Which looks like this:

<p align="center"> <img src="https://raw.githubusercontent.com/bykof/go-plantuml/master/docs/assets/graph.svg"> </p>

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT