Как проверить основные функции пакета в golang?

Я хочу протестировать несколько функций, которые включены в мой основной пакет, но мои тесты не могут получить доступ к этим функциям.

Мой пример файла main.go выглядит так:

package main

import (
    "log"
)

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

func foo() string {
    return "Foo"
}

и мой файл main_test.go выглядит так:

package main

import (
    "testing"
)

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

когда я бегуgo test main_test.go я получил

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

Как я понимаю, даже если я переместил тестовый файл в другое место и попытался импортировать его из файла main.go, я не смог бы его импортировать, поскольку онpackage main.

Как правильно структурировать такие тесты? Должен ли я просто удалить все изmain Пакет, кроме простой основной функции, запускает все, а затем тестирует функции в их собственном пакете, или есть ли способ вызвать эти функции из основного файла во время тестирования?