Here's an incus container with no networking which demonstrates it working.
root@zzz:~# ping 8.8.8.8
ping: connect: Network is unreachable
root@zzz:~# go mod init wombat
go: creating new go.mod: module wombat
go: to add module requirements and sums:
go mod tidy
root@zzz:~# vi main.go
root@zzz:~# mkdir -p internal/a internal/b
root@zzz:~# vi internal/a/main.go
root@zzz:~# vi internal/b/main.go
root@zzz:~# go mod tidy
root@zzz:~# go fmt ./...
root@zzz:~# go build .
root@zzz:~# ls -l
total 1796
drwxr-xr-x 3 root root 4096 Jun 8 16:58 go
-rw-r--r-- 1 root root 25 Jun 8 16:58 go.mod
drwxr-xr-x 4 root root 4096 Jun 8 16:58 internal
-rw-r--r-- 1 root root 103 Jun 8 17:01 main.go
-rwxr-xr-x 1 root root 1821783 Jun 8 17:01 wombat
root@zzz:~# ./wombat
Hello, World!
Here are the source files:
==> main.go <==
package main
import "wombat/internal/a"
import "wombat/internal/b"
func main() {
a.Say()
b.Say()
}
==> internal/a/main.go <==
package a
func Say() {
print("Hello, ")
}
==> internal/b/main.go <==
package b
func Say() {
print("World!\n")
}