Some of this documentation may be out of date.

## Belarusian - Беларуская

  * [faq-be](http://www.designcontest.com/show/faq-be) - Frequently Asked Questions.

## Brazilian Portuguese - Português brasileiro

  * [A Tour of Go](http://go-tour-br.appspot.com/)
  * [golangbr.org](http://golangbr.org/) - Go documentation and news.

## Chinese - 中文

  * [A Tour of Go](http://go-tour-zh.appspot.com/)
  * [Go 编程语言](http://zh-golang.appspot.com/) - Chinese Translation of tip.golang.org
  * [Go编程语言](https://golang-china.appspot.com/) ([参与翻译](https://github.com/golang-china)) - Go语言文档翻译(QQ群:368836416).
  * [Effective Go and (old) Tutorial](http://code.google.com/p/ac-me/downloads/detail?name=fango.pdf)

## Czech - Čeština

  * [Pravidla reflexe](http://www.abclinuxu.cz/clanky/google-go-pravidla-reflexe) - a translation of [The Laws of Reflection](http://blog.golang.org/2011/09/laws-of-reflection.html).

## French - Français

  * [golang-france](http://code.google.com/p/golang-france/) - Go documentation.

## German - Deutsch

  * [Eine Anleitung zum Programmieren in Go](http://bitloeffel.de/DOC/golang/go_tutorial_de.html) - the (old) Go Tutorial.
  * [Wirkungsvoll Go programmieren](http://bitloeffel.de/DOC/golang/effective_go_de.html) - Effective Go.
  * [Wie man Go-Kode schreibt](http://bitloeffel.de/DOC/golang/code_de.html) - How to Write Go Code.
  * [Deutschsprachige Go Themenseite - German Go resource page](http://www.hweidner.de/golang)

## Japanese - 日本語

  * [A Tour of Go](http://go-tour-jp.appspot.com/)
  * [golang.jp](http://golang.jp/) - Go documentation and news.


## Korean - 한국어

  * [A Tour of Go](http://go-tour-kr.appspot.com)
  * [golang-korea](http://code.google.com/p/golang-korea) - Go documentation and news.

## Turkish - Türkçe

  * [A Tour of Go](http://tur.a.golang.org.tr/)

