gobyexample

GitHub

Go by Example

8,082 stars Go Markdown CodeWiki
AI Prompts & Endpoints
CodeWiki Knowledge Base

CONTRIBUTING

Contributing

Thanks for your interest in contributing to Go by Example!

* When sending a PR that affects the displayed contents of the site,
updating the HTML in the public directory by itself is insufficient, since
the source of truth for the website is in the examples directory.

Instead, update the proper source file(s) in the examples directory and
run tools/build locally to regenerate the HTML; include both changes in
your PR.

If you don't want to deal with getting a proper PR in, feel free to just
open an issue and point out the change you suggest.

* We're open to adding more examples to the site. They should be on things
used by many programmers and only require the standard library. If you're
interested in adding an example, _please open an issue to discuss the topic
first_.

* We're not going to change the navigation of the site, in particular adding
a "previous section" link or an "index" link other than the one on the title
text.

---

README

Go by Example

Content and build toolchain for Go by Example,
a site that teaches Go via annotated example programs.

Overview

The Go by Example site is built by extracting code and
comments from source files in examples and rendering
them using templates into a static public
directory. The programs implementing this build process
are in tools, along with dependencies specified in
the go.modfile.

The built public directory can be served by any
static content system. The production site uses S3 and
CloudFront, for example.

Building

[](https://github.com/mmcgrana/gobyexample/actions/workflows/test.yml)

To build the site you'll need Go installed. Run:

console
$ tools/build

To build continuously in a loop:

console
$ tools/build-loop

To see the site locally:

console
$ tools/serve

and open http://127.0.0.1:8000/ in your browser.

Publishing

To upload the site:

console
$ export AWS_ACCESS_KEY_ID=...
$ export AWS_SECRET_ACCESS_KEY=...
$ tools/upload

License

This work is copyright Mark McGranaghan and licensed under a
Creative Commons Attribution 3.0 Unported License.

The Go Gopher is copyright RenΓ©e French and licensed under a
Creative Commons Attribution 3.0 Unported License.


Translations

Contributor translations of the Go by Example site are available in:

* Chinese by gobyexample-cn
* French by keirua
* Italian by andrearaponi
* Japanese by spinute
* Korean by mingrammer
* Ukrainian by butuzov
* Brazilian Portuguese by lcslitx
* Burmese by Set Kyar Wa Lar
* Uzbek by elchintoyirov
* Arabic by 0xKa
* Bulgarian by kberov

Thanks

Thanks to Jeremy Ashkenas
for Docco, which
inspired this project.

FAQ

#### I found a problem with the examples; what do I do?

We're very happy to fix problem reports and accept contributions! Please submit
an issue or send a Pull Request.
See CONTRIBUTING.md for more details.

#### What version of Go is required to run these examples?

Given Go's strong backwards compatibility guarantees,
we expect the vast majority of examples to work on the latest released version of Go
as well as many older releases going back years.

That said, some examples show off new features added in recent releases; therefore,
it's recommended to try running examples with the latest officially released Go version
(see Go's release history for details).

#### I'm getting output in a different order from the example. Is the example wrong?

Some of the examples demonstrate concurrent code which has a non-deterministic
execution order. It depends on how the Go runtime schedules its goroutines and
may vary by operating system, CPU architecture, or even Go version.

Similarly, examples that iterate over maps may produce items in a different order
from what you're getting on your machine. This is because the order of iteration
over maps in Go is not specified and is not guaranteed to be the same from one
iteration to the next
.

It doesn't mean anything is wrong with the example. Typically the code in these
examples will be insensitive to the actual order of the output; if the code is
sensitive to the order - that's probably a bug - so feel free to report it.

---