go编译静态文件到exe

需要写一个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 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 3

头像不错,借用一下 谢谢老板 cdn.learnku.com/uploads/avatars/55...

1年前 评论
// 这里不能有空格
//go:embed templates/transaction.html
var content []byte

如果将一个文件夹下所有静态模板文件打包,应该怎么做呢这里?

7个月前 评论
Runtoweb3 (楼主) 7个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!