Live data from Hacker News

How I Start: Go

howistart.org

1–10 of 36 posts

Re: How I Start: Go

#2
This article turns into the creation of a small web app, so while not exactly relevant, I'll ask here: are there any good form validation libraries for Go?

I ended up using this approach:

http://www.alexedwards.net/blog/form-validation-and-processi...

This is straightforward but also manual and low-level.

In comparison is Python's formencode library which is declarative and high-level:

    class Registration(formencode.Schema):
        first_name = validators.ByteString(not_empty=True)
        last_name = validators.ByteString(not_empty=True)
        email = validators.Email(resolve_domain=True)
        username = formencode.All(validators.PlainText(),UniqueUsername())
        password = SecurePassword()
        password_confirm = validators.ByteString()
        chained_validators = [validators.FieldsMatch('password', 'password_confirm')]
I thought about how you could design a library like this in Go, but couldn't think of a way that did not end up using reflection or plain maps, which defeats the purpose of using static typing.

Is this lack of validation libraries due to the lack of people writing web apps with the language or is it a problem of expressiveness with the language itself?

I ran into this issue several times when trying to write a web app in Go. A lot of the basic infrastructure is there, but the niceties are missing. The template language, for example, is great but lacks something as basic as inheritance without kludges. There are other templating languages, but they don't feel quite there. Got the same feel from the ORMs. Hats off to those who are doing work in it in spite of this, but it seems there's a way to go before the language is really usable for web apps.

Re: How I Start: Go

#3
I like the idea of this series, because I think it's more useful than Hello World type examples. There's an implicit trust that whoever is writing the article knows what they're doing, which could be a problem for someone new to a community. I skimmed over the Ruby one (I know Ruby better than Go), and it seemed pretty solid, and was written by a Rails core contributor, so it should be. Hopefully they'll get more of these out.

Re: How I Start: Go

#4

This article turns into the creation of a small web app, so while not exactly relevant, I'll ask here: are there any good form validation libraries for Go? I ended up using this approach: http://www.alexedwards.net/blog/form-validation-and-processi... This is straightforward but also manual and low-level. In comparison is Python's formencode library which is declarative and high-level: class Registration(formencode.S…

> are there any good form validation libraries for Go?

Here are a couple:

http://www.gorillatoolkit.org/pkg/schema

http://godoc.org/github.com/mccoyst/validate

There are also some bigger web framework projects that include validation, Revel is one: http://revel.github.io/manual/validation.html

Re: How I Start: Go

#6
post #4

This article turns into the creation of a small web app, so while not exactly relevant, I'll ask here: are there any good form validation libraries for Go? I ended up using this approach: http://www.alexedwards.net/blog/form-validation-and-processi... This is straightforward but also manual and low-level. In comparison is Python's formencode library which is declarative and high-level: class Registration(formencode.S…

> are there any good form validation libraries for Go? Here are a couple: http://www.gorillatoolkit.org/pkg/schema http://godoc.org/github.com/mccoyst/validate There are also some bigger web framework projects that include validation, Revel is one: http://revel.github.io/manual/validation.html

schema is not a validation library, it just turns HTTP forms into Go structs. Validate uses tags or maps (not a huge issue, granted). The Revel one does look nice, though. Thanks.

Re: How I Start: Go

#7

This article turns into the creation of a small web app, so while not exactly relevant, I'll ask here: are there any good form validation libraries for Go? I ended up using this approach: http://www.alexedwards.net/blog/form-validation-and-processi... This is straightforward but also manual and low-level. In comparison is Python's formencode library which is declarative and high-level: class Registration(formencode.S…

>couldn't think of a way that did not end up using reflection

The builtin decoders (eg, json) use reflection. You don't lose any of the benefits of static typing as you are still decoding into your statically-typed object.

I would separate form parsing from object validation.

Use something like this: https://github.com/ajg/form to populate statically-typed go structs from form data, and then validate your objects.

Re: How I Start: Go

#8

This article turns into the creation of a small web app, so while not exactly relevant, I'll ask here: are there any good form validation libraries for Go? I ended up using this approach: http://www.alexedwards.net/blog/form-validation-and-processi... This is straightforward but also manual and low-level. In comparison is Python's formencode library which is declarative and high-level: class Registration(formencode.S…

>couldn't think of a way that did not end up using reflection The builtin decoders (eg, json) use reflection. You don't lose any of the benefits of static typing as you are still decoding into your statically-typed object. I would separate form parsing from object validation. Use something like this: https://github.com/ajg/form to populate statically-typed go structs from form data, and then validate your objects.

There is a speed hit to reflection, though, right?

Also, you do lose the benefit of static typing, for example, the following typo isn't picked up at compile time:

    type User struct {
        Name         string            `form:"nam"`
    }
Tags are rather ugly and don't scale to many options well. What happens when your ORM, form validation library, xml library, and json libraries each need a separate tag? That's a slight exaggeration but you could see how the apparent simplicity in the form example can quickly become anything but.

Heavy use of tags (and reflection) just makes me feel like you have to work around the language too much and I question whether you may as well just use Python, hence my original question.

I've done minimal work with Go, though, so perhaps I'm misinformed.

Re: How I Start: Go

#9
Don't use println(), use fmt.Println() or other equivalent functions instead.

   Current implementations provide several built-in functions
   useful during bootstrapping. These functions are documented
   for completeness but are not guaranteed to stay in the
   language.
http://golang.org/ref/spec#Bootstrapping

And for beginners, it could be interesting to know that decoders also support simple maps in addition to tagged struct.

Nice series of articles.

Re: How I Start: Go

#10

I like the idea of this series, because I think it's more useful than Hello World type examples. There's an implicit trust that whoever is writing the article knows what they're doing, which could be a problem for someone new to a community. I skimmed over the Ruby one (I know Ruby better than Go), and it seemed pretty solid, and was written by a Rails core contributor, so it should be. Hopefully they'll get more of…

I know Peter from the Go community. He also wrote previously some posts about Go. As same, I don't know the others too :)
Post reply on HN