Open-source project
golang101/golang101 avatar
golang101/golang101

Go 101: a self-hosted Go knowledge base you install with go install

Go语言101 : 一个与时俱进的Go编程知识库

5,033 stars457 forksHTMLLicense varies

At a glance

What is it?
golang101/golang101 is a book series about Go syntax, semantics, generics and performance, shipped as a local web server. It suits readers who want a reference they can run offline, and it is not a course, a linter or a library.
Who is it for?
Adopt Go 101 if you already write Go and want a reference that explains why the language behaves as it does, or if you are learning Go and prefer long-form prose to scattered posts. Skip it if you need a guided course with exercises and grading, or a tool that checks your code, because the repository ships prose and a reader, not a curriculum or an analyzer.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 80 days ago.
What is it written in?
Mainly HTML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Go 101 actually is, and who it is written for

The repository holds a book series, not a library. The README lists four titles: 《Go语言(基础知识)101》 on Go syntax and semantics apart from custom generics, 《Go自定义泛型101》 on generics, 《Go程序优化101》 on performance advice, and 《Go细节和小技巧101》 on details and small techniques. The stated audience is both beginners and programmers with some Go experience, and the goal is a deeper, more complete understanding of the language rather than a tour of the standard library.

That framing matters when you decide whether to adopt it. A reader who wants to write a first HTTP handler will find the material slower than a tutorial site. A reader who has already shipped Go and keeps hitting surprises about slices, channels or the memory model is the intended audience. The README says the author has been writing the series and maintaining the go101.org site since 2016, so the content has had a long editorial run rather than being a single burst of posts.

How the local reader works: a Go binary that serves the pages

The repository is mostly HTML under pages/, with a Go program wrapped around it. The top-level entries include main.go, golang101.go, golang101-embed.go, gen.go, redirects.go and platform files net_darwin.go, net_linux.go and net_windows.go. The module path in go.mod is go101.org/golang101, targeting Go 1.18, and the only dependency is golang.org/x/sys.

The name golang101-embed.go points at Go's embed mechanism: the book pages are compiled into the binary rather than read from disk at runtime. That is why the installed command can serve the whole series without you cloning the repository. The platform-specific net files exist because the program opens the reader in your default browser, and opening a browser is not the same call on macOS, Linux and Windows.

The README shows the server printing two addresses, http://localhost:12345 described as the non-cached version and http://127.0.0.1:12345 described as the cached version. Treat that distinction as a debugging lever: if you edit or regenerate pages, the cached address may serve you a stale copy.

Installing Go 101 and reading it at localhost:12345

The README states that running the site requires the official Go toolchain v1.18 or later, and gives the install command directly. Installing the module places a golang101 executable in your GOBIN directory.

bash
go install go101.org/golang101@latest

Run the command with no arguments to start the server. The README notes that GOBIN must be on your PATH, and that its default value is GOPATH/bin. The expected output names two URLs, and the start page should open in your default browser automatically.

bash
golang101

If the browser does not open, the README says to visit http://localhost:12345 manually. The README documents two command-line options, shown here in the form it gives them: -port=1234 to change the listening port, and -theme=light or -theme=dark, with light as the default.

code
-port=1234
-theme=light # 或者 dark (默认为 light)

The README also addresses a practical problem for readers in mainland China: if the online edition is blocked, it says to run the local version as described or download an offline edition from the releases page. Release tags follow Go versions, with v1.25.a published on 2025-08-15, v1.23.b on 2024-10-15 and v1.22.a on 2024-03-18, so the series tracks language releases rather than using independent version numbers.

Where Go 101 stops being the right tool

The series is prose, and prose has limits. There is no exercise runner, no test suite for readers, and no feedback on the code you write. If your goal is to pass an interview or finish a structured course, the repository will not pace you.

The README is explicit about one boundary that has nothing to do with technology: the author reserves the publication rights for the series, including paper and all electronic editions, and asks that you open an issue before reposting it online. Mirroring the pages on your own site is therefore not a neutral act, whatever the repository's licence file says. No licence identifier is stated in the repository description or README, so read the LICENSE file at the repository root before reusing any part of the text.

A second limitation is version drift. The series is described as continuously improving, and releases are tagged against Go versions. A page that matches v1.25.a may not describe a feature added in a later toolchain, and the README does not document a rollback procedure if a newer tag changes something you relied on. Pin the tag you install if you need stability.

Go 101 against the official Go documentation and tutorial sites

The obvious comparison is the official Go documentation and the language specification. The specification is authoritative and precise, but it is written to define the language, not to explain the reasoning behind it. Go 101 sits between the two: it covers syntax and semantics while also discussing runtime behaviour, which is the layer most confusion actually lives in.

Against interactive tutorial sites, the difference is the delivery model. A tutorial site runs in a browser you do not control and often gates progress behind an account. Go 101 installs as a binary through the Go toolchain you already have, serves embedded pages on localhost, and keeps working without a network connection once installed. That is a genuine advantage on a locked-down machine or a slow connection, and it is also why the project can be read offline when the hosted site is unreachable.

The trade-off is that a static book cannot check your answers. Tutorial platforms give immediate feedback on small exercises; Go 101 gives you a long explanation and leaves verification to you, with the Go compiler as the only judge.

Maintenance, releases and what upgrading costs you

The repository is not archived, and the last push was on 2026-07-11. Releases are sparse and tied to Go versions: three are listed, from March 2024 to August 2025. That cadence tells you what to expect. You will not get frequent small fixes, and you should not install @latest on a machine where you need a fixed reading experience; the module path supports version selection, so pin the tag that matches your toolchain.

Upgrade cost is low in mechanical terms. Re-running the install command replaces the binary, and since the pages are embedded, there is no separate content directory to sync. The real cost is editorial: a new tag may rewrite explanations you had bookmarked, and the README does not describe a changelog beyond the UPDATES.md file in the repository root, which you should read before moving to a new tag.

On licensing, no identifier appears in the repository description or README, so the LICENSE file at the repository root is the place to look. The README's separate note about publication rights is a stronger signal than the licence alone for anyone planning to republish text.

Editorial conclusion

Adopt Go 101 if you already write Go and want a reference that explains why the language behaves as it does, or if you are learning Go and prefer long-form prose to scattered posts. Skip it if you need a guided course with exercises and grading, or a tool that checks your code, because the repository ships prose and a reader, not a curriculum or an analyzer. Before relying on it, check the release tag that matches your Go version and confirm the local server starts on port 12345 with the theme you want.

Frequently asked questions

What is Go 101 used for?

It is a book series for learning and referencing Go: syntax and semantics, custom generics, performance optimization, and small language details. The README says it suits both beginners and experienced Go programmers who want a deeper understanding of the language.

Is Go 101 hard to learn from?

The README positions the series for beginners and for programmers with some Go experience, so entry level is not assumed to be high. The material is long-form explanation rather than exercises, so difficulty depends on how much prose you want before writing code.

How do I install Go 101 and read it locally?

Install it with go install go101.org/golang101@latest, then run the golang101 command. The README says the server starts on http://localhost:12345 and http://127.0.0.1:12345, and that the start page opens in your default browser.

Does Go 101 need Go installed to run?

Yes. The README states that running the series site requires the official Go toolchain v1.18 or later, and go.mod declares go 1.18. The only module dependency listed is golang.org/x/sys.

Official sources

  1. golang101/golang101 on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/golang101-golang101.svg)](https://hysenlabs.com/projects/golang101-golang101)