Packages and Modules
Module Paths
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
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)
}
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
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
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