Якщо ти просто біжиш go run test1.go і цей файл має посилання на функцію в іншому файлі того самого пакету, це призведе до помилки, оскільки ви не сказали Go запускати весь пакет, ви сказали йому запускати лише один файл.
Ви можете сказати go для запуску як цілого пакета, згрупувавши файли як пакет у запуску, яким командовано декількома способами. Ось кілька прикладів (якщо ваш термінал знаходиться в каталозі вашого пакету):
go run ./
АБО
go run test1.go test2.go
АБО
go run *.go
Ви можете розраховувати на таку ж поведінку за допомогою команди build, і після запуску виконаний виконаний файл буде виконуватися як згрупований пакет, де файли знають про інші функції тощо. Приклад:
go build ./
АБО
go build test1.go test2.go
АБО
go build *.go
А потім просто виклик виконуваного файлу з командного рядка дасть вам результат, подібний до використання команди run, коли ви запустили всі файли разом як цілий пакет. Приклад:
./test1
Або будь-яке інше ім'я вашого виконуваного файлу, яке випадково називається під час його створення.
go fmt? Як у терміналі чи що? Як це показує, що він про щось піклується?