如何把 vue 網頁應用編譯進 Go語言建立網頁服務

閱讀時間約 4 分鐘
vue gopher

前言介紹


在 golang 1.16之後官方提供的工具包裡面有個 `embed` 可以使用,這使得把檔案嵌入 golang 的二進制編譯更為容易,以至於方便我們部署一些並非 .go 的副檔名檔案。
這裡要介紹的是如何把 vue 作為前端,編譯至我們的 golang 專案內,起一個網頁服務。

在開始前...

我們要先了解 embed 這個工具能帶給我們什麼,我們先實做一個簡單的專案先用指令建立一個 go module
go mod test-embed
然後再專案資料夾建立一個檔案 `sample.txt` 內容長這樣的
hello embedding
這時我們可以撰寫我們的 `main.go`
package main

import (
_ "embed"
"fmt"
)

//go:embed sample.txt
var app string

func main() {
fmt.Println(app)
}
這樣我們可以讀取到 sample.txt 的內文並且顯示在 command line 上,這樣很簡單對吧,並且在編譯後刪除 sample.txt 執行結果不受影響,原因其實很簡單,因為 sample.txt 皆編譯進入 go binary code 內了
go run main.go
以及編譯結果
hello embedding
接下來我們把它 build 出來
go build -o app && ./app

接下來我們開始我們正式的實作

首先我們先建立 golang 專案並建立 go module
go mod init cool-embedding-project
在專案資料夾內建立我們 vue 的前端內容
pnpm create vite --template vue-ts web
這時,我們的專案資料夾內容會長這樣
.
├── go.mod
├── main.go
└── web
├── README.md
├── index.html
├── package.json
├── public
│ └── vite.svg
├── src
│ ├── App.vue
│ ├── assets
│ │ └── vue.svg
│ ├── components
│ │ └── HelloWorld.vue
│ ├── main.ts
│ ├── style.css
│ └── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
然後我們到 web 的資料夾內進行前端該有的安裝和編譯
pnpm install && pnpm build
然後我們會產出一個 dist 的資料夾,那是前端編譯出來的 html,js,css結果
接著我們可以開始處理我們的主程式了
package main

import (
"embed"
"io/fs"
"log"
"net/http"
)

//go:embed testwow/dist
var app embed.FS

func main() {
dist, err := fs.Sub(app, "web/dist")
if err != nil {
log.Fatalf("sub error")
return
}
http.Handle("/", http.FileServer(http.FS(dist)))
log.Fatal(http.ListenAndServe(":8080", nil))
}
好了,我們完成了,我們使用 go 提供的 net/http 包去監聽 8080 port,並且我們利用 io/fs 提供的方法去抓取 embed 內的資料,去起一個網頁服務
go run main.go
這時我們會在 http://localhost:8080 看到我們的 vue 畫面了
是時候把他編譯成二進制 code
go build -o app && ./app
由於我們已經打包完成,所以即使我們把 web 資料夾內容刪除,執行
./app
也不會影響到我們的結果,我們成功把 vue 的前端內容編進去我們的 Go語言應用了。
感謝觀看。
如果想要知道更詳細的內容,可以參考我的 medium 文章
順便追蹤我的 medium


如果對網頁開發,區塊鏈開發,手機應用開發,桌面應用開發有興趣的可以來看看
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在這個資訊爆炸的時代,大數據成為了至關重要的資源,尤其是在電商領域。 正因如此,賣家們迫切需要提升行銷效果,以便在激烈的市場競爭中脫穎而出。 賣家精靈作為一款強大賣家助手工具寳箱,為賣家提供了廣告和流量管理的全方位解決方案。 我們可以善於其來深入地瞭解市場需求,精準優化行銷策略,從而贏得競爭優勢。 
我時常用 Kobo 閱讀器來看電子書,在閱讀的過程中,我會順手把看了有感覺的句子標註起來,另外我也會用 Notion 來記錄我的閱讀清單,我想利用程式自動把 kobo 閱讀器裡的標註段落(Highlights)匯入到 Notion 裡,該如何做呢?
Thumbnail
3/29讀書會已圓滿完成,在這篇文章中,我想和大家分享我從這本書中學到的幾個關鍵點,以及我如何將這些理念應用到我的工作和生活中,以達到更高的效率和更佳的生活質量。
Thumbnail
培養毅力難嗎? 在這篇文章中,我分享瞭如何在生活中把行為轉變成習慣的四個有效方法。從每天的計畫到身處的空間,這些建議都能幫助你成功建立新的習慣,並克服做某件事情困難的感覺。要讓習慣成為你的力量,不只是執行,也充滿滿足感,一步一步的改變就是正在成為更好的自己。
Thumbnail
律師執業過程中接觸到滿多詐騙的案件,遭詐騙後要怎麼處理的文章比較少,今天就讓陳道長來教學大家遭到詐騙要怎麼處理。 以下就常見問題都會一一解答: 1.為什麼我在警局提告之後,會由不同地區的警局、地檢署、法院偵辦? 2.我被詐騙了,還要跑不同地區的法院去調解、開庭,光是請假、來回交通費就花了不少錢?
Thumbnail
大家好,歡迎來到考古搬運文現場! 這篇文章之所以會出現,是因為學生時期自己搬到外面住以後發現...... 沒有WIFI 啊~~~在這個手機當道的時代,怎麼沒有WIFI呢?! 於是我盯著接了網路線可以上網的筆電看, 決定上網找找辦法,讓筆電變成WIFI分享器!
Thumbnail
連鎖文體會大流行,最根本的原因是「人最感興趣的是自己」。在注意力是超級稀缺資源的時代,如果其他人能把目光集中在我們身上,就會產生一種站在浪尖上、成為潮人的成就感甚至虛榮感。
英文,並不是拼音語言(phonetic language),所以大多數的時候你沒有辦法透過單純拼音的方式,就能正確地說出英文單字的音。
Thumbnail
適合用於視障試卷報讀、背書考試神器、佛經朗讀、Podcast 等使用情境 文字轉語音軟體 免費試用下載 「文字MP3」是將文字轉換為聲音檔的工具軟體(文字轉語音) 您可以將任意Text文字轉換為MP3音檔,可以自訂發音速度快慢,還可以產生朗讀的文字聲音同步檔!
Thumbnail
首先,你必須要知道自己到底要練的是哪一首歌,不能今天練ITZY的loco,還沒練完隔天就練aespa的next level。 而假裝你已經選好一首歌了,那麼就像前一篇文章說的一樣,先將歌曲記熟,記得,是記熟,不是聽過就忘的那種。 再來,假裝今天給自己訂的目標是從00:00~00:30(一小段一小段慢
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在這個資訊爆炸的時代,大數據成為了至關重要的資源,尤其是在電商領域。 正因如此,賣家們迫切需要提升行銷效果,以便在激烈的市場競爭中脫穎而出。 賣家精靈作為一款強大賣家助手工具寳箱,為賣家提供了廣告和流量管理的全方位解決方案。 我們可以善於其來深入地瞭解市場需求,精準優化行銷策略,從而贏得競爭優勢。 
我時常用 Kobo 閱讀器來看電子書,在閱讀的過程中,我會順手把看了有感覺的句子標註起來,另外我也會用 Notion 來記錄我的閱讀清單,我想利用程式自動把 kobo 閱讀器裡的標註段落(Highlights)匯入到 Notion 裡,該如何做呢?
Thumbnail
3/29讀書會已圓滿完成,在這篇文章中,我想和大家分享我從這本書中學到的幾個關鍵點,以及我如何將這些理念應用到我的工作和生活中,以達到更高的效率和更佳的生活質量。
Thumbnail
培養毅力難嗎? 在這篇文章中,我分享瞭如何在生活中把行為轉變成習慣的四個有效方法。從每天的計畫到身處的空間,這些建議都能幫助你成功建立新的習慣,並克服做某件事情困難的感覺。要讓習慣成為你的力量,不只是執行,也充滿滿足感,一步一步的改變就是正在成為更好的自己。
Thumbnail
律師執業過程中接觸到滿多詐騙的案件,遭詐騙後要怎麼處理的文章比較少,今天就讓陳道長來教學大家遭到詐騙要怎麼處理。 以下就常見問題都會一一解答: 1.為什麼我在警局提告之後,會由不同地區的警局、地檢署、法院偵辦? 2.我被詐騙了,還要跑不同地區的法院去調解、開庭,光是請假、來回交通費就花了不少錢?
Thumbnail
大家好,歡迎來到考古搬運文現場! 這篇文章之所以會出現,是因為學生時期自己搬到外面住以後發現...... 沒有WIFI 啊~~~在這個手機當道的時代,怎麼沒有WIFI呢?! 於是我盯著接了網路線可以上網的筆電看, 決定上網找找辦法,讓筆電變成WIFI分享器!
Thumbnail
連鎖文體會大流行,最根本的原因是「人最感興趣的是自己」。在注意力是超級稀缺資源的時代,如果其他人能把目光集中在我們身上,就會產生一種站在浪尖上、成為潮人的成就感甚至虛榮感。
英文,並不是拼音語言(phonetic language),所以大多數的時候你沒有辦法透過單純拼音的方式,就能正確地說出英文單字的音。
Thumbnail
適合用於視障試卷報讀、背書考試神器、佛經朗讀、Podcast 等使用情境 文字轉語音軟體 免費試用下載 「文字MP3」是將文字轉換為聲音檔的工具軟體(文字轉語音) 您可以將任意Text文字轉換為MP3音檔,可以自訂發音速度快慢,還可以產生朗讀的文字聲音同步檔!
Thumbnail
首先,你必須要知道自己到底要練的是哪一首歌,不能今天練ITZY的loco,還沒練完隔天就練aespa的next level。 而假裝你已經選好一首歌了,那麼就像前一篇文章說的一樣,先將歌曲記熟,記得,是記熟,不是聽過就忘的那種。 再來,假裝今天給自己訂的目標是從00:00~00:30(一小段一小段慢