Need help with ifacemaker?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

vburenin
170 Stars 23 Forks Apache License 2.0 78 Commits 8 Opened issues

Description

Generate interfaces from structure methods.

Services available

!
?

Need anything else?

Contributors list

# 247,439
Go
golang
struct
dummy-d...
14 commits
# 94,301
Go
golang
Shell
swagger...
13 commits
# 187,241
csgo
golang
CSS
kafka
11 commits
# 140,720
matterm...
React N...
driver
Redux
7 commits
# 32,895
PHP
golang
yii2
Yii Fra...
4 commits
# 231,213
Go
cargo
Rust
http-cl...
1 commit
# 231,684
HTML
React
CSS
marketi...
1 commit
# 178,251
Ansible
HTML
sensu
nagios
1 commit

ifacemaker Build Status

This is a development helper program that generates a Golang interface by inspecting the structure methods of an existing

.go
file. The primary use case is to generate interfaces for gomock, so that gomock can generate mocks from those interfaces. This makes unit testing easier.

Install

go get github.com/vburenin/ifacemaker

Usage

Here is the help output of ifacemaker:

$ ifacemaker --help
Usage:
  ifacemaker [OPTIONS]

Application Options: -f, --file= Go source file to read, either filename or glob -s, --struct= Generate an interface for this structure name -i, --iface= Name of the generated interface -p, --pkg= Package name for the generated interface -y, --iface-comment= Comment for the interface, default is '// ...' -d, --doc= Copy docs from methods (default: true) -D, --type-doc Copy type doc from struct -c, --comment= Append comment to top, default is '// Code generated by ifacemaker; DO NOT EDIT.' -o, --output= Output file name. If not provided, result will be printed to stdout.

Help Options: -h, --help Show this help message $

As an example, let's say you wanted to generate an interface for the Human structure in this sample code:

package main

import "fmt"

type Human struct { name string age int }

// Returns the name of our Human. func (h *Human) GetName() string { return h.name }

// Our Human just had a birthday! Increase its age. func (h *Human) Birthday() { h.age += 1 fmt.Printf("I am now %d years old!\n", h.age) }

// Make the Human say hello. func (h *Human) SayHello() { fmt.Printf("Hello, my name is %s, and I am %d years old.\n", h.name, h.age) }

func main() { human := &Human{name: "Bob", age: 30} human.GetName() human.SayHello() human.Birthday() }

The ifacemaker helper program can generate this interface for you:

$ ifacemaker -f human.go -s Human -i HumanIface -p humantest -y "HumanIface makes human interaction easy" -c "DONT EDIT: Auto generated"
// DONT EDIT: Auto generated

package humantest

// HumanIface makes human interaction easy type HumanIface interface { // Returns the name of our Human. GetName() string // Our Human just had a birthday! Increase its age. Birthday() // Make the Human say hello. SayHello() }

$

In the above example, ifacemaker inspected the structure methods of the Human struct and generated an interface called HumanIface in the humantest package. Note that the ifacemaker program preserves docstrings by default.

You can tell ifacemaker to write its output to a file, versus stdout, using the

-o
parameter:
$ ifacemaker -f human.go -s Human -i HumanIface -p humantest -y "HumanIface makes human interaction easy" -c "DONT EDIT: Auto generated" -o humaniface.go
$

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.