И это всё МОЁ

Я напишу сначала как делаю это я:


$ mkdir project
$ cd project
$ mkdir -p cmd/prog1 internal pkg
$ go mod init project


При такой структуре, тестирование кода, расположенного в ./internal (и других каталогах, где лежат go файлы с package отличным от main) сводится к вызову:


$ go test ./... -v


Для запуска тестов для main извращаюсь так:


$ go test ./cmd/*


Пример cmd/main_test.go:


package main

import (
"os"
"testing"
)

// Для чего это делать?
// Можно ли как-то запустить Main функцию с аргументами командной строки?
// os.Args = []string{os.Args[0], "-h"} вместо справки по проге, выводит справку по тестированию
func TestMain(m *testing.M) {
os.Exit(m.Run())
}



Правильно ли я понимаю, что Main никак не протестировать? Это в C++ int main(int argc, char** argv), а тут как? Единственный вывод, который я сделал: Main должна содержать 3-5 строк, типа:


func main() {
flags := Flags;
setupFlags(&flags);
flag.Parse();
run(&flags);
}


Тогда можно будет написать тесты. Что я не правильно усвоил?