A Go module path names the module and usually looks like an import path.

module path Module paths are strings in `go.mod`; this example reads them as ordinary deterministic text.

Module Paths

modulePath
module_paths.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"strings"
)

func main() {
	var modulePath = "example.com/app"
	parts := strings.Split(modulePath, "/")
	domain := parts[0]
	name := parts[len(parts)-1]
	version := "v1.2.0"

	fmt.Println("module=", modulePath)
	fmt.Println("domain=", domain)
	fmt.Println("name=", name)
	fmt.Println("version=", version)
}
package main

import (
	"fmt"
	"strings"
)

func main() {
	var modulePath = "example.org/tool"
	parts := strings.Split(modulePath, "/")
	domain := parts[0]
	name := parts[len(parts)-1]
	version := "v1.2.0"

	fmt.Println("module=", modulePath)
	fmt.Println("domain=", domain)
	fmt.Println("name=", name)
	fmt.Println("version=", version)
}
package main

import (
	"fmt"
	"strings"
)

func main() {
	var modulePath = "github.com/team/project"
	parts := strings.Split(modulePath, "/")
	domain := parts[0]
	name := parts[len(parts)-1]
	version := "v1.2.0"

	fmt.Println("module=", modulePath)
	fmt.Println("domain=", domain)
	fmt.Println("name=", name)
	fmt.Println("version=", version)
}
  1. modulePath ← "example.com/app", parts ← []string{"example.com", "app"}

    8func main() {9  var modulePath→ "example.com/app" = "example.com/app" //@modulePath="example.org/tool", "github.com/team/project"10  parts→ []string{"example.com", "app"} := strings.Split(modulePath"example.com/app", "/")11  domain→ "example.com" := parts[0]"example.com"12  name→ "app" := parts[]string{"example.com", "app"}[len(parts)-1]13  version→ "v1.2.0" := "v1.2.0"1415  fmt.Println("module=", modulePath"example.com/app")16  fmt.Println("domain=", domain"example.com")17  fmt.Println("name=", name"app")18  fmt.Println("version=", version"v1.2.0")19}
    outputmodule= example.com/app
    domain= example.com
    name= app
    version= v1.2.0
  1. modulePath ← "example.org/tool", parts ← []string{"example.org", "tool"}

    8func main() {9  var modulePath→ "example.org/tool" = "example.org/tool"10  parts→ []string{"example.org", "tool"} := strings.Split(modulePath"example.org/tool", "/")11  domain→ "example.org" := parts[0]"example.org"12  name→ "tool" := parts[]string{"example.org", "tool"}[len(parts)-1]13  version→ "v1.2.0" := "v1.2.0"1415  fmt.Println("module=", modulePath"example.org/tool")16  fmt.Println("domain=", domain"example.org")17  fmt.Println("name=", name"tool")18  fmt.Println("version=", version"v1.2.0")19}
    outputmodule= example.org/tool
    domain= example.org
    name= tool
    version= v1.2.0
  1. modulePath ← "github.com/team/project", parts ← []string{"github.com", "team", "project"}

    8func main() {9  var modulePath→ "github.com/team/project" = "github.com/team/project"10  parts→ []string{"github.com", "team", "project"} := strings.Split(modulePath"github.com/team/project", "/")11  domain→ "github.com" := parts[0]"github.com"12  name→ "project" := parts[]string{"github.com", "team", "project"}[len(parts)-1]13  version→ "v1.2.0" := "v1.2.0"1415  fmt.Println("module=", modulePath"github.com/team/project")16  fmt.Println("domain=", domain"github.com")17  fmt.Println("name=", name"project")18  fmt.Println("version=", version"v1.2.0")19}
    outputmodule= github.com/team/project
    domain= github.com
    name= project
    version= v1.2.0