1. 程式人生 > >Go語言開發:在HTML模板中引入js及其他靜態檔案

Go語言開發:在HTML模板中引入js及其他靜態檔案

問題:

用go語言開發,在html頁面中,引入js檔案無效,寫在js檔案中的函式無法呼叫,也沒有報錯;js程式碼直接寫html頁面中,可以呼叫,但是看起來太亂了,不舒服。這個問題困擾了好久,在網上搜了好多資料都無法解決問題,今天終於解決了,TND,看到答案的時候,原來這麼簡單。

參考文章

Go語言引用css和js檔案
go的template模板怎麼才能引入css和js等靜態檔案?
致敬原創,為上面的兩位作者點贊。
網上的文章太多千篇一律,很多都是抄的,不解決問題。

我的問題:

在寫一個小專案的過程中,在html網頁中直接寫js程式碼,是有效的,但是將js程式碼單獨放到js檔案中就無效了,無法呼叫其中的函式,目錄大概是這樣

sszxr:blog sszxr$ tree
.
├── gomod
│   ├── accesscontrol.go
│   ├── app.go
│   ├── login.go
│   ├── register.go
│   └── session.go
├── main.go
├── models
│   ├── article.go
│   ├── homepage.go
│   └── user.go
├── static
│   ├── css
│   │   └── login.css
│   └── js
│       ├── blog.js
│       ├── lib
│       │   ├── jquery-3.3.1.min.js
│       │   └── jquery.url.js
│       └── reload.min.js
├── template
│   ├── accountset.html
│   ├── login.html
│   ├── register.html
├── utils
│   ├── myUtils.go
│   └── mysqlUtil.go
└── validator
    └── regexp.go

在html頁面中是這樣引用的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>部落格賬號 - 登入</title>
    <script src="../static/js/lib/jquery-3.3.1.min.js"></script>
    <script src="../static/js/lib/jquery.url.js"></script>
    <script
src="../static/js/blog.js">
</script> </head> <body style="background-image:url(http://phc94on01.bkt.clouddn.com/%E5%8D%D%89.jpg); background-size: cover;background-color: rgba(214,210,207,0.45)"> <div style="width:100%;height: 600px"></div>

看了網上的好多攻略,主要因為是Go語言的問題,Go語言太不火了,好多問題都搜不到答案,網上搜到的答案基本都不能解決問題。
參考上面兩篇文章的答案,是因為Go語言無法直接引用靜態檔案,必須要做靜態服務才能引用,而做靜態服務,大概就是要把靜態檔案,包括js檔案,css檔案的存放路徑,告訴go編譯器,不然的話,找不到檔案,所以在html頁面中無法引用js中的函式或程式碼。
也就是在main檔案中,在路由監聽前,要匯入js檔案路徑

    fs := http.FileServer(http.Dir("static"))
	http.Handle("/static/", http.StripPrefix("/static/", fs))
	http.HandleFunc("/", app.Login)
	http.HandleFunc("/login", app.Login)
	http.HandleFunc("/register", app.Register)

這樣就解決問題了。