Home

Awesome

ita GoDocCoverage StatusBuild Status

ita is a Go(Golang) library that provides a clean API for dynamically calling structs methods.

The name ita is a swahili word for call.

Motivation

I needed a clean API for calling struct methods, that will need to avoid unnecessary panics. I identified some of the the panics I was to avoid, and return errors instead.

So, for my use case I had no reason to panic on any of those scenarions. Instead I wanted to have an error raised so I can make other choices rather than recover from the panic( Did I say I almost fainted after a good dose of panics!)

So, Ita works with structs methods only. And its my intetion to try to give meaningful error messages rather than panicking.

But be warned, IT IS YOUR JOB TO CHECK FOR ERRORS

The latest error encountered is always available via the Error() method of Struct instance.

features

Installation

go get github.com/gernest/ita

How to use

package main

import (
	"fmt"

	"github.com/gernest/ita"
)

type Hello struct{}

func (h *Hello) Say() string {
	return "hello"
}

func (h *Hello) Who(name string) string {
	return name
}
func (h *Hello) Double(word string) (string, string) {
	return word, word
}

func main() {
	hell := ita.New(&Hello{})

	// call Who
	who := hell.Call("Who", "gernest")
	
	// If you want to check errors
	if who.Error()!=nil{
		// do something
	}

	// call Say
	say := hell.Call("Say")

	// call double
	double := hell.Call("Double", "!")

	// get the returned results for calling Who
	name, _ := who.GetResults().First()

	// get the result returned by Say
	message, _ := say.GetResults().First()

	// get results returned by double
	doubleResult := double.GetResults()

	firstDouble, _ := doubleResult.First()
	lastDouble, _ := doubleResult.Last()

	fmt.Printf("%s %s %s%s", message, name, firstDouble, lastDouble)

}

You can see tests for more examples.

Contributing

Start with clicking the star button to make the author and his neighbors happy. Then fork it and submit a pull request for whatever change you want to be added to this project.

Or Open an issue for any questions.

Author

twitter : @gernesti

Roadmap

Licence

This project is released under MIT licence see LICENCE for more details.