How to Create a Package in Go

Hey! If you love Go and building Go apps as much as I do, let's connect on Twitter or LinkedIn. I talk about this stuff all the time!

Want to learn how to build better Go applications faster and easier? You can.

Check out my course on the Go Standard Library. You can check it out now for free.


Packages are an essential part of Go’s modular design. They allow you to organize your code into logical units that can be easily shared and reused across different projects. In this article, we will cover the basics of creating a package in Go and how it can benefit your software development journey.



Introduction to Packages in Go

A package is a collection of Go source files that provide a set of related functions or types. Packages are used to organize code into logical units, making it easier to maintain and reuse. In Go, packages are stored in a directory structure that mirrors the package’s import path. For example, if you have a package named “math/sum”, its source files would be located in a directory called “sum” inside a parent directory called “math”.

Creating a Package

To create a new package in Go, you can use the go command-line tool. Here’s an example of how to create a new package called “mypackage”:

$ go get github.com/yourusername/mypackage

This will create a new directory with the specified name and add it to your Go workspace. You can then use this command to import the package in other projects:

import "github.com/yourusername/mypackage"

Defining a Package

Once you have created a new package, you need to define its structure. This includes declaring any types or functions that will be used by other packages. You can do this by creating a mypackage.go file inside the package directory. For example:

// mypackage.go
package mypackage

type Person struct {
    Name string
}

func (p *Person) Greet() {
    fmt.Println("Hello, my name is", p.Name)
}

This code defines a new type called Person with one field (Name) and one method (Greet). You can then use this package in other projects by importing it:

import (
    "fmt"
    "github.com/yourusername/mypackage"
)

func main() {
    p := mypackage.Person{Name: "John"}
    fmt.Println(p.Greet()) // prints "Hello, my name is John"
}

Exporting Symbols

To make a symbol (such as a type or function) available to other packages, you need to export it using the export keyword. For example:

// mypackage.go
package mypackage

type Person struct {
    Name string
}

func (p *Person) Greet() {
    fmt.Println("Hello, my name is", p.Name)
}

export Person // export the Person type

This makes the Person type available to other packages that import this package.

Using a Package

To use a package in your own code, you need to import it using the import statement. For example:

import (
    "fmt"
    "github.com/yourusername/mypackage" // imports mypackage package
)

func main() {
    p := mypackage.Person{Name: "John"}
    fmt.Println(p.Greet()) // prints "Hello, my name is John"
}

This code imports the mypackage package and uses its Person type to create a new instance with the name “John”. It then calls the Greet() method on that instance and prints the result to the console.

Conclusion

Packages are an essential part of Go’s modular design. They allow you to organize your code into logical units, making it easier to maintain and reuse. In this article, we covered the basics of creating a package in Go and how it can benefit your software development journey. By following these guidelines, you can create modular and reusable code that will help you build better software faster.


Questions or comments? Reach out to me


Learn how to leverage the Go Standard Library like a PRO.

I just created a new course, The Go Standard Library, check it out!