首頁  >  文章  >  後端開發  >  golang如何打包

golang如何打包

尚
原創
2020-01-13 10:33:285475瀏覽

golang如何打包

golang打包的方法:

1、使用go-bindata打包:

go-bindata 很簡單,設計理念也不難理解。它的任務就是講靜態文件封裝在一個 Go 語言的 Source Code 裡面,然後提供一個統一的接口,你透過這個接口傳入文件路徑,它將給你返回對應路徑的文件資料。

簡單來說就是它可以把我們的靜態文件產生 .go 文件,這樣就可以編譯成二進位文件,專案啟動的時候再把這個 .go 文件再釋放成靜態檔。

使用範例:

打包整個靜態目錄,使用的時候釋放

# 目录结构
ConfigTest
├── asset
│   └── asset.go 静态文件编译之后的go文件
├── config # 静态文件目录
│   ├── rule.yaml
│   └── rule.json
├── cli # 运行目录
│   ├── config 执行main释放出来的静态文件
│   │   ├── rule.yaml
│   │   └── rule.json
│   └── main # main.go编译之后生成的二进制执行文件
└── main 程序目录
    └── main.go # 源码

執行指令將靜態檔案打包成go檔案

go-bindata -o=./asset/asset.go -pkg=asset config/...

-o # 指定打包后生成的go文件路径
-pkg # 指定go文件的包名
config/... # 指定需要打包的静态文件路径

2.使用go.rice打包

go.rice 也支援打包靜態檔案到go 檔案中,但是行為和 go-bindata 很不相同。從使用角度,go.rice 其實是更方便的靜態檔案作業庫。打包靜態檔案反而是順帶的功能。

安裝

go get github.com/GeertJohan/go.rice/...

使用

go.rice 把一個目錄視為一個 rice.Box 操作

import (
    "fmt"
    "html/template"

    "github.com/GeertJohan/go.rice"
)

func main() {
    // 这里写相对于的执行文件的地址
    box, err := rice.FindBox("theme/default")
    if err != nil {
        println(err.Error())
        return
    }
    // 从目录 Box 读取文件
    str, err := box.String("post.html")
    if err != nil {
        println(err.Error())
        return
    }
    t, err := template.New("tpl").Parse(str)
    fmt.Println(t, err)
}

指令

#go. rice 的打包指令是rice。用起來非常直接:在有使用 go.rice 操作的 go 代碼目錄,直接執行 rice embed-go:

rice embed-go
rice -i "github.com/fuxiaohei/xyz" embed-go // -i 处理指定包里的 go.rice 操作

更多golang知識請關注PHP中文網golang教程欄。

以上是golang如何打包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn