Skip to content

Latest commit

 

History

History
93 lines (79 loc) · 3.35 KB

File metadata and controls

93 lines (79 loc) · 3.35 KB

Golang Workspaces Folder Structure

If you choose to stick to the traditional GOPATH setup (not recommended for modern Go modules)

1. General Workspace Folder

  • 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
    

Environment Setup with Workspaces

  1. Create the base projects folder:

    mkdir -p ~/projects/{github.com,gitlab.com,bitbucket.org,personal,playground,company_name}
  2. Export Environment Variables (Optional): Add these to your ~/.zshrc or ~/.bash_profile:

    export WORKSPACE=~/projects
    export PATH=$PATH:$WORKSPACE/bin
  3. 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

Golang Project Structure

/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

Comparison

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