stretchr / goweb

A lightweight RESTful web framework for Go
632 stars 61 forks source link

Simplified API in the future? Goweb use too many []interface{} for args #71

Open nvcnvn opened 10 years ago

nvcnvn commented 10 years ago

I'm going to use Goweb for the next project, after reading the API document I feel Goweb use too many ...interface{} for the function agrs. I give some flexible but sometime give some confusions. Why don't we just provide the most general API for the function? For example, goweb.Map should be:

func Map(fn func(c context.Context) error, path string, methods []string, matchers []handlers.MatcherFunc) (handlers.Handler, error)

or goweb.MapController should be just:

func MapController(controller interface{}, path string) error

I know this is not that importan and hard to change because you will break your old code but it still worth something! I bet that many of us love Go because the simplicity and clarity (by the lack of function overloading and something else)

Thanks for the team for your great package!

matryer commented 10 years ago

Thanks for that feedback. Some good points.

Mat

Sent from my iPhone

On 22 Nov 2013, at 20:20, nvcnvn notifications@github.com wrote:

I'm going to use Goweb for the next project, after reading the API document I feel Goweb use too many ...interface{} for the function agrs. I give some flexible but sometime give some confusions. Why don't we just provide the most general API for the function? For example, goweb.Map should be:

func Map(fn func(c context.Context) error, path string, methods []string, matchers []handlers.MatcherFunc) (handlers.Handler, error) or goweb.MapController should be just:

func MapController(controller interface{}, path string) error I know this is not that importan and hard to change because you will break your old code but it still worth something! I bet that many of us love Go because the simplicity and clarity (by the lack of function overloading and something else)

Thanks for the team because you provide a great package!

— Reply to this email directly or view it on GitHub.

matryer commented 10 years ago

You can tell we came from Ruby and JavaScript and not C++ can't you :D

matryer commented 10 years ago

Do you think adding strict versions would be a pointless thing?

I.e.

goweb.Map(args ...interface{}) (handlers.Handler, error)

AND goweb.MapS(fn func(c context.Context) error, path string, methods []string, matchers []handlers.MatcherFunc) (handlers.Handler, error)

The Map function would just figure out how to call MapS but hard-corers would be able to just use the MapS function directly?

nvcnvn commented 10 years ago

I think a strict version should be good for the near future. But in the far future, remove all the switch case block for determine the type should cleaner and shorten some of your code, do you think so?

P/s: If there is a strict version, you should use it in your examples/tutorials (person like me will look at them first :D)