Как скопилировать все несвязные файлы в Go?

У меня есть небольшое количество несвязных между собой файлов (это не части модуля или проекта), просто разного рода наброски и заметки.

Как собрать их все разом явно не указывая каждый раз, что именно нужно скомпилировать?

go run .
# _/mnt/library/projects/hck/Go
./listen.go:12:6: main redeclared in this block
    previous declaration at ./array.go:7:6
go build .
# _/home/Sharlatan/Projects/hck/Go
./listen.go:12:6: main redeclared in this block
        previous declaration at ./array.go:7:6

/array.go/

package main

import (
    "fmt"
)

func main() {
    var a1 [10]int
    a2 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    fmt.Println(a1)
    fmt.Println(a2)
}

/listen.go/

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8181", nil)
}

Ответы (2 шт):

Автор решения: Ainar-G

Надо указывать каждый файл по отдельности. Если вы хотите это автоматизировать, используйте Make:

all: array.bin listen.bin
array.bin:  ; go build -o $@ ./array.go
listen.bin: ; go build -o $@ ./listen.go

Или Shell:

for f in ./array.go ./listen.go
do
	go build -o "${f%.go}.bin" "$f"
done
→ Ссылка
Автор решения: Hellseher

Точка (.) в конце команды говорит о том, что все принадлежит одному пакету и выдает ошибку о дублированной main() при компиляции.

Старый добрый Makefile (GNU make) может решить "проблему" там, где ее вроде и не должно быть - скомпилировать заведомо неизвестный список несвязных между собой файлов.

/Makefile/

GO_FILES := $(wildcard ./*.go)

all:
    @$(foreach file ,$(GO_FILES), go build -o $(subst .go,,$(file)) $(file);)
ls; make; ls 
Makefile  array.go  listen.go  randomPass.go
Makefile  array  array.go  listen  listen.go  randomPass  randomPass.g

Ссылки

→ Ссылка