go編譯靜態檔案到exe

bytecc發表於2022-08-01

需要寫一個window執行的exe檔案,使用者執行這個檔案時,程式首先會起一個http服務,然後自動開啟瀏覽器訪問這個服務預設頁面。
使用go實現的話,有三個知識點

  1. 交叉編譯,要把我的go程式碼編譯為window執行的檔案
  2. 編譯html等靜態檔案到exe檔案中
  3. 啟動window的瀏覽器

    核心程式碼

    main.go
package main
import (
    _ "embed"
    "log"
    "net"
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/skratchdot/open-golang/open"
)
// 這裡不能有空格
//go:embed templates/transaction.html
var content []byte

func main() {
    l, err := net.Listen("tcp", "localhost:3000")
    if err != nil {
        log.Fatal(err)
    }
    r := SetRouter()

    // 使用第三方的包開啟chrome
    open.RunWith("http://localhost:3000/transaction", "chrome")
    // Start the blocking server loop
    http.Serve(l, r)
}

func SetRouter() *gin.Engine {
    r := gin.Default()
    // 顯示發起交易頁面
    r.GET("/transaction", func(c *gin.Context) {
        c.Data(http.StatusOK, "text/html", content)
    })
    return r
}

交叉編譯

Linux 下編譯 Mac 和 Windows 64位可執行程式

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Mac 下編譯 Linux 和 Windows 64位可執行程式

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

編譯靜態資源

embed標準包是go 1.16引入的,目的就是方便我們編譯靜態資源

本作品採用《CC 協議》,轉載必須註明作者和本文連結
用過哪些工具?為啥用這個工具(速度快,支援高併發...)?底層如何實現的?

相關文章