If you choose to stick to the traditional GOPATH setup (not recommended for modern Go modules)
- Location:
/Users/your_username/projects/ - Example:
/Users/your_username/projects/ ├── github.com/ # For public projects (e.g., GitHub repositories) ├── gitlab.com/ # For GitLab repositories ├── bitbucket.org/ # For Bitbucket repositories ├── personal/ # For personal or local-only projects ├── company_name/ # For work-related or organization-specific projects └── playground/ # For testing, experimentation, or temporary projects
-
Create the base
projectsfolder:mkdir -p ~/projects/{github.com,gitlab.com,bitbucket.org,personal,playground,company_name} -
Export Environment Variables (Optional): Add these to your
~/.zshrcor~/.bash_profile:export WORKSPACE=~/projects export PATH=$PATH:$WORKSPACE/bin
-
Create a New Project:
-
Public Project:
mkdir -p ~/projects/github.com/your_username/my_go_project cd ~/projects/github.com/your_username/my_go_project go mod init github.com/your_username/my_go_project
-
Personal Project:
mkdir -p ~/projects/personal/my_go_project cd ~/projects/personal/my_go_project go mod init personal/my_go_project
-
Work Project:
mkdir -p ~/projects/company_name/my_go_project cd ~/projects/company_name/my_go_project go mod init company_name/my_go_project
-
/Users/your_username/projects/
├── github.com/
│ └── your_username/
│ ├── public_project1/
│ ├── public_project2/
│ └── my_go_project/
├── gitlab.com/
│ └── your_username/
│ └── team_project/
├── bitbucket.org/
│ └── your_username/
│ └── enterprise_project/
├── personal/
│ ├── experiment1/
│ └── my_go_project/
├── company_name/
│ ├── internal_tool/
│ └── client_project/
└── playground/
├── go_sandbox/
└── random_tests/
This structure ensures a professional and organized workspace for Go development
| Type | Modern Structure (Recommended) | Legacy GOPATH Structure |
|---|---|---|
| Public Project Path | /Users/toe/projects/github.com/username/project/ |
/Users/toe/go/src/github.com/username/project/ |
| Personal Project Path | /Users/toe/projects/personal_project/ |
/Users/toe/go/src/personal_project/ |
| Dependency Management | Go modules (go.mod) |
Relies on GOPATH |
| Flexibility | Can be placed anywhere | Must be under GOPATH/src/ |
| Ease of Use | Modern tooling; no GOPATH restriction | More restrictive setup |