Difference Between Package and Module in Golang

1. Introduction

In Golang, packages and modules are fundamental concepts for code organization and dependency management. A package in Go is a way to organize and encapsulate related code into a single unit, which can be reused across the program. A module, however, is a collection of related Go packages that are released together. A module is identified by a module path, which is also the import path used for the root directory.

2. Key Points

1. Scope: A package is a single directory of Go source files, and a module is a collection of packages.

2. Purpose: Packages encapsulate code; modules manage dependencies.

3. Declaration: Packages are declared within code files, and modules are declared in a go.mod file.

4. Dependency Management: Modules are used for versioning and sharing packages.

3. Differences

Characteristic Package Module
Scope Single directory of Go files Collection of packages
Purpose Encapsulate code Manage dependencies
Declaration In code files In go.mod file
Dependency Management N/A Used for versioning/sharing packages

4. Example

// Example of a Package
// File: math.go in package 'math'
package math

func Add(a, b int) int {
    return a + b

// Example of a Module
// File: go.mod
module myapp

go 1.15

require (
    github.com/some/dependency v1.2.3


No direct output as these are structural code examples.


1. In the package example, math is a package that encapsulates the Add function.

2. In the module example, myapp is a module defined by go.mod, which includes a set of packages and specifies dependencies like github.com/some/dependency.

5. When to use?

- Use packages to organize and encapsulate your Go source code into reusable units.

- Use modules to manage dependencies of your Go projects, including versioning and sharing of packages across projects.