Hola Mario,
Hace tiempo que no me dedico a programar en Go así que quizás pase por alto cosas que te servirían mejor pero aún así me gustaría ayudarte.
Creo que el problema que tienes es importando paquetes.
Cuando pretendes importar algo suele ser un package.
Es posible que ya lo definas bien pero no está de más repetirlo.
Cuando defines el objeto a importar debes escribir
package <nombredelpaquete>
y no package main.
Si lo haces así luego puedes escribir en el código en que quieras usar el paquete el
import "<pathhastaelpaquete>/<nombredelpaquete>".
Ten en cuenta que si programas en un repositorio es bastante interesante hacer que el pathhastaelpaquete sea el del repositorio.
Luego para usar la Funcion de tu paquete en tu main puedes usar paquete.Funcion
Creo que en un mismo directorio no puedes poner más de un paquete así que asegúrate de no juntar tu main con otro paquete.
Espero haber sido de ayuda. Te copio debajo un ejemplo:
Son tres códigos. Se ejecuta el package main (test/test_hello.go)
El package main llama a dos otros packages, world y hello
Fíjate que el package hello está en src/
github.com/usuario/hello, esto es lo que decía que te puede ser útil si lo vas a publicar en un repositorio.
También te valdría para un repositorio privado, si lo descargas a tu disco en el directorio correspondiente.
Por otro lado world está en src/world, te puede ser útil localmente algo así pero no olvides que debe colgar de GOPATH o GOROOT.
Fíjate que el nombre del archivo que tiene el código no importa.
~/src$ go run test/test_hello.go
Hello World
func PrintHello(name string) {
fmt.Println("Hello", name)
~/src$ cat world/un_nombre.go
~/src$ cat test/test_hello.go
hello.PrintHello(world.World())
Saludos,
Zorion