Como testar as principais funções do pacote golang?

Quero testar algumas funções incluídas no meu pacote principal, mas meus testes não parecem capazes de acessar essas funções.

Meu arquivo main.go de amostra é semelhante a:

package main

import (
    "log"
)

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

func foo() string {
    return "Foo"
}

e meu arquivo main_test.go se parece com:

package main

import (
    "testing"
)

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

quando eu corrogo test main_test.go eu recebo

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

Pelo que entendi, mesmo que eu tenha movido o arquivo de teste para outro lugar e tentado importar do arquivo main.go, não poderia importá-lo, pois épackage main.

Qual é a maneira correta de estruturar esses testes? Devo apenas remover tudo domain O pacote oferece uma função principal simples para executar tudo e testar as funções em seu próprio pacote, ou existe uma maneira de chamar essas funções do arquivo principal durante o teste?