Skip to main content

Overview

Learn Go is an open-source educational project that welcomes contributions from the community. Whether you’re fixing typos, adding examples, or translating content, your contributions help thousands of developers learn Go.

Repository Information

Source Repository

Main course materials and examples

Author

@inancgumus on Twitter

Blog

In-depth Go articles and tutorials

YouTube

Video tutorials and explanations

Ways to Contribute

1. Report Issues

Found a bug, typo, or unclear explanation?
1

Check existing issues

Search the GitHub issues to see if it’s already reported.
2

Create a new issue

If not found, create a new issue with:
  • Clear title
  • Location (file path and line number)
  • Description of the problem
  • Screenshots if applicable
3

Be specific

Include which section/exercise you’re referring to and what you expected vs. what you found.

2. Fix Bugs or Typos

Small fixes are always welcome!
Quick Fix Workflow
# Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/learngo.git
cd learngo

# Create a branch
git checkout -b fix/typo-in-variables-section

# Make your changes
# Edit the relevant file

# Commit with a clear message
git add .
git commit -m "Fix typo in 06-variables/README.md"

# Push and create a pull request
git push origin fix/typo-in-variables-section
For typos or small fixes, you can even use GitHub’s web editor to make changes directly in your browser.

3. Add Examples

Have a great example that illustrates a concept? What makes a good example:
  • Clear and concise
  • Demonstrates one concept well
  • Includes comments explaining the code
  • Follows Go conventions and style
  • Works without external dependencies (when possible)
Example structure:
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials  : https://learngoprogramming.com
// In-person training  : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus

package main

import "fmt"

func main() {
    // Clear example demonstrating the concept
    message := "Hello, Go!"
    fmt.Println(message)
}

4. Improve Documentation

Help make explanations clearer:
  • Add clarifying comments to complex examples
  • Create README files for sections that lack them
  • Improve existing documentation
  • Add diagrams or illustrations (where appropriate)

5. Translate Content

The course is being translated into multiple languages! Currently supported:
  • English (complete)
  • Spanish (work in progress)
  • Chinese (work in progress)
1

Check translation folder

Look in translation/[language] to see what’s already done.
2

Follow the structure

Keep the same directory structure as the English version.
3

Translate accurately

Maintain technical accuracy while making it natural in the target language.
4

Test code examples

Ensure all code examples work correctly.
Don’t use automated translation tools alone. The translations should be reviewed by a native speaker with Go knowledge.

6. Add Exercises

Create new exercises to help learners practice: Exercise guidelines:
  • Should reinforce concepts from the section
  • Include both the problem and solution
  • Provide hints when appropriate
  • Clearly state the learning objective
Structure:
exercises/
├── 01-your-exercise/
│   ├── main.go          # Starting template
│   ├── README.md        # Problem description
│   └── solution/
│       └── main.go      # Working solution

Pull Request Process

1

Fork the repository

Create your own fork on GitHub.
2

Create a feature branch

git checkout -b feature/add-concurrency-examples
3

Make your changes

Follow the coding style and structure of existing materials.
4

Test your changes

Ensure all code compiles and runs correctly:
go run main.go
go test ./...
5

Commit with clear messages

git add .
git commit -m "Add examples for buffered channels"
6

Push to your fork

git push origin feature/add-concurrency-examples
7

Create a pull request

Go to GitHub and create a PR with:
  • Clear title
  • Description of changes
  • Why the change is needed
  • Screenshots if applicable

Coding Standards

Go Code Style

Follow standard Go conventions:
# Format your code
go fmt ./...

# Check for common issues
go vet ./...

# Run tests
go test ./...

File Headers

Include the standard header in all Go files:
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials  : https://learngoprogramming.com
// In-person training  : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus

Comments

  • Use clear, concise comments
  • Explain the “why” not just the “what”
  • For examples, comments should aid learning

Directory Structure

Follow the existing structure:
XX-topic-name/
├── 01-concept/
│   └── main.go
├── 02-another-concept/
│   └── main.go
├── exercises/
│   └── README.md
└── questions/
    └── README.md

What Not to Contribute

Please avoid the following:
  • Major restructuring without discussion - Open an issue first
  • External dependencies unless absolutely necessary
  • Overly complex examples - Keep it simple for learners
  • Duplicate content - Check if it already exists
  • AI-generated translations - Translations need human review
  • Promotional content - Keep it educational

Review Process

  1. Automated checks: Your PR will run automated tests
  2. Code review: Maintainers will review your changes
  3. Feedback: You may be asked to make adjustments
  4. Merge: Once approved, your PR will be merged
Be patient! Maintainers are volunteers and may take time to review. Feel free to politely ping if there’s no response after a week.

Community Guidelines

Be Respectful

  • Welcome newcomers
  • Be patient with questions
  • Provide constructive feedback
  • Assume good intentions

Be Helpful

  • Answer questions when you can
  • Share your knowledge
  • Point people to relevant resources
  • Celebrate others’ progress

Be Professional

  • Keep discussions technical and educational
  • Avoid off-topic conversations
  • Respect the code of conduct
  • Give credit where due

Recognition

Contributors are valued members of the community!
  • Your contributions help thousands of learners
  • You’ll be listed in the repository’s contributors
  • You’ll gain experience with open source
  • You’ll deepen your own Go knowledge
Teaching others is one of the best ways to learn. Contributing to Learn Go helps both you and the community!

Getting Help

Need help with your contribution?

GitHub Issues

Ask questions about contributing in the issues

Twitter

Reach out to @inancgumus

Course Community

Connect with other learners and contributors

FAQ

Check frequently asked questions

First-Time Contributors

New to open source? Perfect!
1

Start small

Fix a typo or improve documentation first.
2

Read the code

Browse existing examples to understand the style.
3

Ask questions

Don’t hesitate to ask for help or clarification.
4

Be patient

Your first PR might need several iterations. That’s normal!

Thank You!

Every contribution, no matter how small, makes a difference. Thank you for helping make Go more accessible to learners worldwide!
Remember: The best way to learn is by doing. Contributing to this repository is both learning and giving back to the community.

FAQ

Frequently asked questions

Best Practices

Learn Go best practices

Troubleshooting

Common issues and solutions

GitHub Repo

Visit the repository

Build docs developers (and LLMs) love