พอดีว่าไปเจอ repo หนึ่ง https://github.com/golang-templates/seed เขามีวิธีจัดการ tools ที่เขาใช้ในการ dev Go ผ่าน Go Module ซึ่งดูแล้วน่าสนใจเลยเอามาเล่าให้ฟัง
จาก repo นี้เขาใช้วิธีสร้าง go module ซ้อนไว้ใน project อีกชั้นหนึ่งแบบนี้
./
├── go.mod
├── go.sum
├── main.go
├── tools
│ ├── go.mod
│ ├── go.sum
│ └── tools.go
แล้วเขียน Makefile กำกับไว้แบนี้
.PHONY: inst
inst: ## go install tools
cd tools && go install $(shell cd tools && go list -e -f '{{ join .Imports " " }}' -tags=tools)
เขาเขียนไว้ว่า ถ้ารันคำสั่ง make inst
มันจะ cd เข้าไปใน tools แล้วสั่ง go install ของที่อยู่ใน import ลงมา
ซึ่งมันเวิร์คโดยเฉพาะกับ tools ต่างๆที่เขียนด้วย Go เหมือนกัน เช่น govulncheck หรือ golangci-lint เป็นต้น แต่ถ้าเป็นพวก tools ที่เขียนด้วยภาษาอื่น อันนี้ทำไม่ได้แน่นอน
จากที่ทดลอง มันติดอยู่อย่างหนึ่ง ถ้าเราเขียน repo แบบนี้ แล้วตั้งใจอยากจะทำเป็น template ให้คนอื่นมาสั่ง gonew ไปใช้ต่อ มันจะไม่สามารถเอา /tools ติดไปด้วยได้ แต่ก็เป็นแนวทางที่น่าสนใจดี สำหรับการนำไปใช้กับโปรเจคทั่วไปครับ
Source link
lol