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 - 中文

  * [Go 语言之旅](https://tour.go-zh.org/)
  * [Go 编程语言](https://go-zh.org/) - 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 (Deprecated)](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

  * [Deutschsprachige Go Themenseite - German Go resource page](http://www.hweidner.de/golang)

## Japanese - 日本語

  * [A Tour of Go](http://go-tour-jp.appspot.com/)
  * [CodeReviewComments](https://qiita.com/knsh14/items/8b73b31822c109d4c497)


## Korean - 한국어

  * [A Tour of Go](http://go-tour-kr.appspot.com)
  * [golang-kr wiki](http://github.com/golang-kr/golang-doc/wiki) - Korean Translation of golang.org/doc

## Russian - русский язык

  * [Effective Go](https://github.com/Konstantin8105/Effective_Go_RU/blob/master/README.md)
  * [Contribution Guide](https://github.com/Konstantin8105/Contribution_Guide_RU)

## Spanish - español
  * [Video course: Go Course from 0 to 100](https://www.youtube.com/watch?v=7SIIyt5-XK0&list=PLl_hIu4u7P64MEJpR3eVwQ1l_FtJq4a5g)
  * [Workshop video: Creating a wiki with Go](https://www.youtube.com/watch?v=0fYb43gIl6I&list=PLfHn_OMWQAHDNxoA3BRWs5NHcstZMAY_B)

## Turkish - Türkçe

  * [A Tour of Go](https://go-tour-turkish.appspot.com)

## Vietnamese - Tiếng Việt

 * [A Tour of Go](http://go-tour-vi.appspot.com/)

## Uzbek — Ўзбекча

 * [A Tour of Go](http://go-tour-uz.appspot.com/)