Why I wrote gocraft/web
developer.uservoice.com
Why I wrote gocraft/web
1–10 of 16 posts
Re: Why I wrote gocraft/web
#2Re: Why I wrote gocraft/web
#3I'd love some opinions on this. I prefer separating models/views/controllers, but have recently seen some mvc apps where models/views/controllers are grouped together by function/name. Thoughts on the traditional MVC directory structure vs alternatives?
Re: Why I wrote gocraft/web
#4You never mentioned martini https://github.com/codegangsta/martini
Re: Why I wrote gocraft/web
#5>>For instance, in Revel you need to put your controllers in a package called ‘controllers’, and models in a package named ‘models’. Nope! I'd love some opinions on this. I prefer separating models/views/controllers, but have recently seen some mvc apps where models/views/controllers are grouped together by function/name. Thoughts on the traditional MVC directory structure vs alternatives?
Can you put links to some of those apps that use that approach?
Re: Why I wrote gocraft/web
#6You never mentioned martini https://github.com/codegangsta/martini
I really like Martini - if it existed a bit earlier, I probably would have just used it and been happy.
That being said, there are some differences between the packages. First, Martini has great plugin support because 3rd parties can inject their arbitrary type into handlers. On the other hand, gocraft/web has nested routers and middleware, which are really important for my own projects.
This may be temporary, but gocraft/web also has faster performance because it does less reflection, and because it's router is O(log(N)) instead of O(N). (See https://github.com/cypriss/golang-mux-benchmark , especially as you add more routes).
Finally, I prefer a more consistent signature to my handlers. Martini optimizes for flexibility. And depending on how much you want to inject into your handlers, your argument list can get really long.
Overall, I think Martini is absolutely great and think it's one of the best Go web libs out there.
Re: Why I wrote gocraft/web
#7 Get("/hello", (*Context).SayHello)
What is going on here? How is (*Context).SayHello being called?Re: Why I wrote gocraft/web
#8I've been using go for some time but I've never seen this: Get("/hello", (*Context).SayHello) What is going on here? How is (*Context).SayHello being called?
func FuncA() { } // normal function
func (int) FuncB() { } // function on an int object
You could later reference those functions via: var func1 := FuncA // assign FuncA into func1 var
var func2 := (int).FuncB // assign FuncB into func2 var
But again, I'm just piecing that together from context and haven't looked at the spec.Re: Why I wrote gocraft/web
#9You never mentioned martini https://github.com/codegangsta/martini
As another commenter mentioned, I learned about Martini midway through writing this. I really like Martini - if it existed a bit earlier, I probably would have just used it and been happy. That being said, there are some differences between the packages. First, Martini has great plugin support because 3rd parties can inject their arbitrary type into handlers. On the other hand, gocraft/web has nested routers and midd…
Most web apps don't have quite so many routes typically but its not unreasonable and I'm surprised routing is allowed to get so expensive in the other frameworks. Kudos to you, I was psyched about Martini so I'm going to see about fixing that for it at least.
Edit: D'oh. Need coffee. No wonder it looked really bad to me, up to 70ms to do routing is abhorrent. Carry on. :)
Re: Why I wrote gocraft/web
#10Earlier quoted context omitted.
As another commenter mentioned, I learned about Martini midway through writing this. I really like Martini - if it existed a bit earlier, I probably would have just used it and been happy. That being said, there are some differences between the packages. First, Martini has great plugin support because 3rd parties can inject their arbitrary type into handlers. On the other hand, gocraft/web has nested routers and midd…
So Gocraft/web stays around ~4ms no matter how many routes you throw at it essentially but Martini and others are ~20ms and sometimes much more? That can really add up. Most web apps don't have quite so many routes typically but its not unreasonable and I'm surprised routing is allowed to get so expensive in the other frameworks. Kudos to you, I was psyched about Martini so I'm going to see about fixing that for it a…