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

更新於 發佈於 閱讀時間約 5 分鐘
vue gopher

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


留言
avatar-img
留言分享你的想法!
avatar-img
Michael 的程式平台
3會員
5內容數
如果對網頁開發,區塊鏈開發,手機應用開發,桌面應用開發有興趣的可以來看看
2024/06/29
前言 從零開始構建一個 DateTimePicker 可能看起來令人畏懼,但試想一下你將獲得的靈活性和控制力。在這個系列中,我們將逐步揭開構建過程的神秘面紗,讓您能夠創建一個完全符合需求的自定義 DateTimePicker。 本文章,屬於付費系列的文章,這篇文章,我會希望讀者可以得到的
Thumbnail
2024/06/29
前言 從零開始構建一個 DateTimePicker 可能看起來令人畏懼,但試想一下你將獲得的靈活性和控制力。在這個系列中,我們將逐步揭開構建過程的神秘面紗,讓您能夠創建一個完全符合需求的自定義 DateTimePicker。 本文章,屬於付費系列的文章,這篇文章,我會希望讀者可以得到的
Thumbnail
2024/06/15
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter
Thumbnail
2024/06/15
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter
Thumbnail
2024/01/14
我看完影片只有一個想法,台灣目前還是用傳統方式開票還有利用人力的方式進行, 我認為這樣並不是很對,因為會增加人為疏失的可能性以外,還有可能造成做票或是小動作的嫌疑,我認為即便有人監票,那種很會『變魔術』的人,也會讓監票員造成困難 我身為一名軟體工程師,是要想 solution 的,
Thumbnail
2024/01/14
我看完影片只有一個想法,台灣目前還是用傳統方式開票還有利用人力的方式進行, 我認為這樣並不是很對,因為會增加人為疏失的可能性以外,還有可能造成做票或是小動作的嫌疑,我認為即便有人監票,那種很會『變魔術』的人,也會讓監票員造成困難 我身為一名軟體工程師,是要想 solution 的,
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 學習筆記,vue-router 篇。
Thumbnail
Vue3 學習筆記,vue-router 篇。
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
前言介紹 在 golang 1.16之後官方提供的工具包裡面有個 `embed` 可以使用,這使得把檔案嵌入 golang 的二進制編譯更為容易,以至於方便我們部署一些並非 .go 的副檔名檔案。 這裡要介紹的是如何把 vue 作為前端,編譯至我們的 golang 專案內,起一個網頁服務。 在開始
Thumbnail
前言介紹 在 golang 1.16之後官方提供的工具包裡面有個 `embed` 可以使用,這使得把檔案嵌入 golang 的二進制編譯更為容易,以至於方便我們部署一些並非 .go 的副檔名檔案。 這裡要介紹的是如何把 vue 作為前端,編譯至我們的 golang 專案內,起一個網頁服務。 在開始
Thumbnail
在寫頁面之前,先來介紹 Vue 頁面結構。 首先先在 src/components 底下建立一個 home.vue 跟寫一個 html 頁面很像,一樣是分成 寫網頁內容、script、style,三個部分,只是 html 標籤換成了 template。 template 就是相當於原生 html 檔
Thumbnail
在寫頁面之前,先來介紹 Vue 頁面結構。 首先先在 src/components 底下建立一個 home.vue 跟寫一個 html 頁面很像,一樣是分成 寫網頁內容、script、style,三個部分,只是 html 標籤換成了 template。 template 就是相當於原生 html 檔
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News