Go子包功能未正确导入

Trying to wrap my head around packages in Golang.

This is my workspace

/bin
/pkg
/src
  /github.com
    /esbenp
      /testrepo
        /subpackage
          somefuncs.go
        main.go

main.go

package main

import "github.com/esbenp/testrepo/subpackage"

func main() {
  Somefunc()
}

somefuncs.go

package subpackage

import "fmt"

func Somefunc() {
  fmt.Printf("yo")
}

I was under the impression that since Somefunc starts with an uppercase letter it would be exported for use in other files that imported it. The ouput I get in the console is.

main.go:4: imported and not used: "github.com/esbenp/testrepo/subpackage"
main.go:8: undefined: Somefunc

Can someone point me in the right direction?

You have to prefix the function by the name of the package is belongs to: subpackage.Somefunc().

In the case you have several subpackages with the same name, you have to alias them while importing them, or there will be a conflict:

import (
    xapi "x/xx/xxx/api"
    yapi "y/yy/yyy/api"
)

When you import a package it will be made available under its name.

To address Somefunc in your main.go you have to do

subpackage.Somefunc()