Собственно, сабж.
Если компилирую, допустим, программу такого вида (отсюда):
package main
import (
"fmt"
"log"
"net/http"
)
func formHandler(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
fmt.Fprintf(w, "POST request successful")
name := r.FormValue("name")
address := r.FormValue("address")
fmt.Fprintf(w, "Name = %s\n", name)
fmt.Fprintf(w, "Address = %s\n", address)
}
func helloHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/hello" {
http.Error(w, "404 not found.", http.StatusNotFound)
return
}
if r.Method != "GET" {
http.Error(w, "Method is not supported.", http.StatusNotFound)
return
}
fmt.Fprintf(w, "Hello!")
}
func main() {
fileServer := http.FileServer(http.Dir("./static"))
http.Handle("/", fileServer)
http.HandleFunc("/form", formHandler)
http.HandleFunc("/hello", helloHandler)
fmt.Printf("Starting server at port 8080\n")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
То размер бинарника радует глаз:
[alexey@ssh test]$ go build -gccgoflags '-s -w' main.go
[alexey@ssh test]$ ls -alh main
-rwxr-xr-x 1 alexey users 59K Dec 4 15:05 main
Но если Я беру что-что вроде этого (отсюда):
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
То бинарник выходит уж слишком большим:
[alexey@ssh test]$ go build -gccgoflags '-s -w' main.go
[alexey@ssh test]$ ls -alh main
-rwxr-xr-x 1 alexey users 11M Dec 4 15:02 main
Размер почти такой же, как и при компиляции обычным go компилятором, не GCC. Для echo такая же проблема.
Что я делаю не так?