¿Cómo probar las funciones del paquete principal en golang?

Quiero probar algunas funciones que se incluyen en mi paquete principal, pero parece que mis pruebas no pueden acceder a esas funciones.

Mi archivo main.go de muestra se ve así:

package main

import (
    "log"
)

func main() {
    log.Printf(foo())
}

func foo() string {
    return "Foo"
}

y mi archivo main_test.go se ve así:

package main

import (
    "testing"
)

func Foo(t testing.T) {
    t.Error(foo())
}

cuando corrogo test main_test.go yo obtengo

# command-line-arguments
.\main_test.go:8: undefined: foo
FAIL    command-line-arguments [build failed]

Según tengo entendido, incluso si moví el archivo de prueba a otro lugar e intenté importarlo desde el archivo main.go, no pude importarlo, ya que espackage main.

¿Cuál es la forma correcta de estructurar tales pruebas? ¿Debo eliminar todo de lamain paquete aparte de una función principal simple para ejecutar todo y luego probar las funciones en su propio paquete, o ¿hay alguna forma de llamar a esas funciones desde el archivo principal durante la prueba?

Respuestas a la pregunta(3)

Su respuesta a la pregunta