Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Free Book: An Introduction to Programming in Go (golang-book.com)
297 points by cdoxsey on Sept 4, 2012 | hide | past | favorite | 70 comments


Thanks, I really want to get serious with that language seeing all the praise from people around. I have began to do some small things with it and it feels like a great language ( I love the no makefile idea !)

My only regret is that this format makes it really hard to print in one motion. Could you provide a link for a PDF version?

The animal on the cover looks really hilarious too!



yes, please provide a pdf version (free or paid, doesn't matter for me) ... oftentimes authors will make a kindle version of the book for sale on Amazon and forget to put out a pdf.


I am an author (not of this book) and I very occasionally get an email asking for PDFs. Maybe one in a thousand sales are PDF. Since it doesn't come up that often I've never bothered with setting up a paid system; I just send them a link and ask nicely for a few bucks via PayPal.

Where do most people go to buy PDFs? Is it really a large-enough market to worry about?


Lulu? At least that's the only place I've specifically bought a PDF - then I found out that it's wrapped in some horrible Adobe DRM (if there are any ways to remove this, I'd love to know). I don't begrudge the money, I just wish I could read it in Preview.app rather than Adobe Digital Reader or what ever it's called - it doesn't scroll smoothly, only page wise which is a massive pain when there's lots of diagrams.

Other than that, all the ebooks I've bought from individual storefronts, often from having seen them on HN, have come as a PDF/epub/mobi bundle to work on any device.


Install Calibre and then follow the instructions here: http://apprenticealf.wordpress.com/

If it's not DRM protected, but rather a "secure" PDF, you'll need some other tools that can remove the owner password. About.com has a list here: http://pcsupport.about.com/od/toolsofthetrade/tp/pdf-passwor...


Please don't password protect PDFs for books. It makes it a huge pain in the ass to actually read. I'd much rather you do what the Pragmatic Bookshelf does and just embed our name into the PDF.


As far as I can tell, O'Reilly doesn't even do that. I've even strings(1)'d them and found nothing.


I grab PDF copies for all the technical books I buy from O'Reilly, PragProg, Manning Books, and Apress.


Don't know, but I find it a great way to read on laptops & desktops. Of course, a nice html would work as well, but that's rare. (also, the pdf reader in KDE remembers what page you're on and lets you annotate etc..)


It's not pretty, but here's a PDF version I compiled from saving each web page as a PDF and then concatenating all of them.

http://www.pdfhost.net/index.php?Action=Download&File=40...


Another great resource is "A Tour of Go": http://tour.golang.org/

You can also install a local version, I've been working through it, and it's great for fiddling with on the plane.


Going through the source code for that tour is also a very good way of getting familiar with the http package and a good introduction to channels.


@cdoxsey - Nice work, but you might link to an installer that doesn't include a text editor. I'd be willing to bet that the majority of the target audience already has their preferred text editor installed.

Edit: After reading the first few chapters, I made a false assumption. It looks like the book is aimed at people new to computing (or, at least, it doesn't make the assumption that the reader has programmed before).


http://golang.org/doc/install

I guess the target audience is programming novices who have never written anything like source code before. Go seems like a strange choice for a first language, being neither foundational (C, Assembler, Scheme/Lisp) nor front-end scripty (JS, Logo, Scratch).


I don't know much about the US, but in Europe the majority of colleges is now teaching either java or C++ as the first language, and only a minority is teaching scripting languages as PHP. I guess it's easier for students to understand higher-level languages and to transport their knowledge to other languages (or, at least, it was easy for me).


I agree about C++ or Java in colleges.

I would add that in high schools we are still taught Pascal here in Poland. I was 15 years ago, and I heard that Pascal is still the first language.


More that it is easier for a classroom to teach an old stable language than invest in new things that might not last. It is rare to see an accomplished programmer who started writing any code in Java... most started with JS (younger folks) or educational environments like Logo/Scratch or super simple envs like Basic.


"It is rare to see an accomplished programmer who started writing any code in Java" are you serious? I know a lot [here in DC]. I personally started with Pascal->C->Java->(all the scripts)->C#


That's not starting in Java.


The book is now on Amazon, available for Kindle and in paperback:

Kindle: http://www.amazon.com/An-Introduction-Programming-Go-ebook/d...

Paperback: http://www.amazon.com/An-Introduction-Programming-Caleb-Doxs...


@cdoxsey - you should link the two versions so that people landing on one know that the other format is available.

What did you use to write it? Nice job!


Should be linked now... Amazon hadn't put them up yet. I wrote the book using Libre Office.


See also another nice book, which can be downloaded as PDF: http://www.miek.nl/projects/learninggo/index.html


I'm kinda bummed that it doesn't cover installing to linux.

Not that installing Linux is difficult, just that A. I suspect we'll see a lot more people on Linux computers, especially in the developing world, and B. beginning programmers should be introduced to the concept of Linux as a programming environment


There's really not much point in covering that in a book beyond pointing you to http://golang.org/doc/install

Go is dead simple to install to Linux via either binary or source. Even building it from scratch on non-standard Linux systems like embedded armv5 systems is easy. Basically if you have a non-broken gcc already, go will build just by invoking one single shell script they provide.


I have been really impressed with Go's portability. I recently cross compiled a binary from a Linux machine for an ARM target and had it running from scratch in less than 15 minutes. Go could become a serious option for embedded Linux targets.


I agree. My current spare-time project involves programming in Go for ARMv5-based boards (old chumby devices).

I write the code in Windows (Sublime Text 2), compile in Windows, but target GOOS=linux, GOARCH=ARM, GOARM=5 and end up with an executable that I can easily rsync and run over on the ARM device. The cross-compiling available in Go is much easier to setup initially than the usual situation of having to build an entire toolchain for your target.


Does B make sense? First install a new OS before learning what a loop is?


Thanks for this. I scanned the document and the language seems pretty straight forward, should be easy to learn. I did a search for classes and object oriented in the document (pdf) and it returned no results.

I did a web search and came up with this https://sites.google.com/site/gopatterns/object-oriented/cla..., maybe the book should reference that somewhere early (maybe not because the intro seems to touch on computer programming in general so I would assume that it was for first-time programmers).


Go doesn't have classes. I agree that it'd make sense to talk about them in a book aimed at C# or Java programmers, but this book is written for people who are new to programming.


Love the format (especially reading from mobile). Thanks for the free book!


The TIOBE programming community index rates Go as not being in the top fifty languages used today. That seems strange since it was the "language of the year" in 2009.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index....

I like Go, and it gets a lot of good press. Is TIOBE not accurately portraying Go's popularity?, or is there some other explanation as to why few people use it?

Sorry, not related to the book (which looks cool, btw).


TIOBE has always been a joke, and only even attempt to manage language chatter, not usage. It is based off job boards and internet search trends, and is highly susceptible to homonym confusion, which is especially harmul in the case of "go".


I find it amusing that people working at Google came up with an ungoogleable name for their programming language.


Unofficially, most people writing articles about Go would try to tag them with "golang" for search-ability ("golang" is also used for all the Go e-mail lists).


At least it's better than C. And Java is also a place, Python is an serpent.

The key to Googlability for everything is to put the right context keywords. Nobody just google's "go" (or "java" for that matter). They google stuff like "go string type", "go programming", "go install", etc.

That said, the bare "go" search term gives the go website as the fourth result in Google when I try it.


Generally, using 'golang' rather than 'go' gives really good search results.


Of course you can work around it if you know how to google, but Java and Python are much easier to search. If you look up "java books" or "python books" you get links about programming language books, not about coffee/Indonesia/serpents.


That's because of adoption and less sites linking and discussing go topics at the moment.

I think if you could Google when Python was in it's infancy, you would get 100s results for pythons (the snakes) before you saw Python pages...

Google search algorithm is not so naive as to understand "go" as a generic token only. It can tell from context which pages are related to "go" the language and which merely use the verb "go". The reverse is how old engines used to work, Altavista and co, where you had tons of irrelevant exact matches.


The greatest value of Tiobe is the trending it captures over years, not the actual data point at a given moment in time. Except for spikes when they changed methodologies, the trends, especially for the most popular languages tend to be reliable. Who's in the top 50 or top 100 languages, I agree is not a useful or reliable data point.


A better index is http://LangPop.com, which I recently sold on to a new owner, who hopefully will be working hard to spruce it up some, and add some new languages like Go, although Go is always going to be problematic in search engines.


Another option is Github, which ranks Go as the 27th most popular language. https://github.com/languages/Go


That's a data source I considered adding for LangPop, but back in the day, was too much of a Ruby hangout. I think these days it's probably suitable.


Any reason you wouldn't use StackOverflow tag volume/activity as a signal?


If more questions are asked about a particular language I don't think it would mean that language is being used more in the real world. Just more people are confused about it.

Not sure if stackoverflow tags are a great indicator. TIOBE tries to use job listings and google trends. Searching job listings/search engines for 'go' probably wouldn't return much results (because of the ambiguous name) which is why its a lot lower than it should be.


> I don't think it would mean that language is being used more in the real world. Just more people are confused about it.

The two are not mutually exclusive. Rather, I'd think they're directly proportional. A very straightforward and simple yet popular language should have very few questions, which doesn't seem to be the case; conversely, brainfuck is particularly cryptic and should have many questions, yet it does not.

StackOverflow is admittedly .NET heavy, but since SV is somewhat anti-Microsoft, perhaps this will balance things out.


http://LangPop.com does not track Go


Err... I said that, didn't I?


Why is it a better index?


1. It has more data sources.

2. It lets you fiddle with the 'normalized comparison' to weight the sources differently. If you play right, you can make your favorite language win!


I really like the structure of this, very readable and a great intro. I have some confusion on http://www.golang-book.com/6

It says:

Go also provides a shorter syntax for creating arrays:

x := [5]float64{ 98, 93, 77, 82, 83 }

We no longer need to specify the type because Go can figure it out. Sometimes arrays like this can get too long to fit on one line, so Go allows you to break it up like this:

However the type is specified as `float64`


I meant you didn't need this:

var x [5]float64 = [5]float64{ 98, 93, 77, 82, 83 }

But I explained ":=" earlier so I can see how that would be confusing.


he means the type of the individual elements. Each element is of type float64, not int.


vs Java-like

float64 myfloat64array[] = new(float64[5], ...)


It's nice, but I wish there was a summary page of the syntax. As an experienced coder, I don't really need to understand the concept of a map, only how it's done in go, and maybe restrictions.


This book isn't for you, then. I understood it as an introduction to programming, using Go.

The official Go website http://golang.org has everything you need, including the spec [1] and the insightful Effective Go [2].

[1] http://golang.org/ref/spec

[2] http://golang.org/doc/effective_go.html


The website says that the book will be for sale on Amazon soon. Anyone know if it will be Kindle friendly? The text looks like it would convert easily from the web pages, if not.



Can't help it, but it needs some more padding:

    #container { padding:60px }
Btw, great resource, the more the merrier.


What's the best way to install Go on Linux (Ubuntu in particular)?

Build from source? Any caveats?


Building Go from source is trivial if you want to do that (two commands, one of which just grabs the Hg repo iirc. building only takes a few minutes on my underpowered eeepc.), but you may as well just use the binary distributions of it.



I'm worried about Gordon the Gopher. He can't reach the pedals. :)


I would have named the book "Go Learn Yourself"


Or "Go Code Yourself"


Any chance of providing an ePub version?


Is there a web framework? Go on Rails?


Go has a great built-in web server in net/http. Not as feature-rich as Rails, it's more akin to a micro framework like bottle.py. I ate my own dog food and the book's site is written in Go.


I was half kidding, but found this: http://www.getwebgo.com/ and http://code.google.com/p/goweb/




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: