<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                Template使用教程 === 本機節課程是template下節課程應該是調度任務 然后是小操作 收官是一個小案例 衍生課程是Cloud Native 如果有時間的話,會把這個小案例做成分布式的 大家有空的話 了解下docker 現在就正式開始我們的課程了 ***** 我們任意打開一個網站,比如就是這個看云,你們有沒有發覺 不同的看云文檔 樣子都一樣,but內容是不一樣的? 這里就要說golang 的html/template了 - 初識html/Template - 變量輸出 - 條件處理 - 輸出嵌套字段內容 1.初識html/Template 我們在前面的課程發現沒有,我們注冊這塊現在只能post,現在去看看其他的網站,用戶注冊和登錄都有一個頁面專門用戶顯示. 好就從這里開始和html/Template來一次約會 我們想創建一個template目錄 創建logo.html 用于展示用戶登錄 創建static目錄用于存放css js 等靜態資源 這個我們為了讓它好看一點就用bootstrap這個ui框架 這個bootstrap下載下來放到static里 補充知識 怎么讓用戶訪問到這個靜態資源呢? 配置文件路由 ``` //靜態資源 router.ServeFiles("/static/*filepath",http.Dir("./template/static/")) ``` 好了我們測試一下是否能通過 http://127.0.0.1:8085/static/ 獲取到static下的文件 OK!看到了,現在我們來用bootstript來完善我們的login.html吧 因為等會會以js的方式提交數據,我寫了一個js utils在static utils下 大家看看吧 ``` <title>{{.Title}}</title> ``` 在html中添加{{.Title}} ``` router.GET("/user/addUser",ShowAddUser) // 展示添加用戶頁面 router.POST("/user/addUser",AddUser) // 添加用戶 // url GET /user/addUser // 展示添加用戶頁面 func ShowAddUser(w http.ResponseWriter,r *http.Request,p httprouter.Params) { // 加載模板 files, e := template.ParseFiles("./template/login.html") if e != nil { fmt.Println("html 解析出問題了") response.SendErrorResponse(w,defs.ErrorTemplateError) return } // 往Template填充內容 type Data struct { Title string Msg string } e = files.Execute(w,&Data{ Title:"注冊", Msg:"html/Template學習", }) if e != nil { fmt.Println("填充數據出問題了",e.Error()) response.SendErrorResponse(w,defs.ErrorTemplateError) return } } ``` 這樣就可以了 ***** 我們來簡單總結一下: 1.第一步加載html `files, e := template.ParseFiles("./template/login.html")` 2.第二部填充數據 ``` // 往Template填充內容 type Data struct { Title string Msg string } e = files.Execute(w,&Data{ Title:"注冊", Msg:"html/Template學習", }) ``` ### 條件判斷 ``` <h1> {{if .Score}} score is {{.Score}} {{else}} no score {{end}} </h1> ``` 注意{{end}}這個是必須的 對了大家應該會好奇為什么傳入的是一個結構體,調用的是結構體的某一個屬性!! ``` file.Execute(w,"你好") 這樣也可以 如何接收呢? <h1>{{.}}</h1> 這個.是根節點的意識 ``` 大家舉一反三吧! ### 比較 - gt 大于 - ge 大于等于 - lt 小于 - le 小于等于 - ne 不等 - eq 等于 ``` <h1> {{if gt .Score 90}} score is A+ {{else if gt .Score 70}} score is A {{else if gt .Score 60}} score is B {{else}} score is C {{end}} </h1> ``` ### 迭代 ``` <h1> {{range $k,$v := .Maps}} <br> {{$k}} : {{$v}} <br> {{end}} </h1> ``` range注意: 此處的{{.}}對象會發生改變為Maps 此時或者獲取到父級的作用域? {{$.}} 這樣就可以了 ***** 我在此給出上面的測試數據: ``` r.ParseForm() score := r.FormValue("score") i, _ := strconv.Atoi(score) // 往Template填充內容 type Data struct { Title string Msg string Score int Maps map[int]string } maps := make(map[int]string) maps[0] = "hello" maps[1] = "golang" maps[2] = "你好啊" e = files.Execute(w,&Data{ Title:"注冊", Msg:"html/Template學習", Score:i, Maps:maps, }) ``` 小重點來了! 注意要讓html獲取到數據,我們要維護一個struct,if當數據非常多的時候這個struct也會非常龐大,這樣就不利于我們后期的維護 如何解決這個問題呢? ``` e = files.Execute(w,map[string]interface{}{ "Request":r, "Score":i, "Msg":"html/Template學習", "Maps":maps, }) ``` 這樣我們html又怎么獲取呢? 我現在先把原來維護struct版本的代碼給出 [https://github.com/dollarkillerx/GolangWebCourseware/tree/2de07dc8b70840c111770fbc074989ea30364dd2](https://github.com/dollarkillerx/GolangWebCourseware/tree/2de07dc8b70840c111770fbc074989ea30364dd2) 哈哈直接用就行了,騷年多嘗試啊 [https://github.com/dollarkillerx/GolangWebCourseware/tree/http/template](https://github.com/dollarkillerx/GolangWebCourseware/tree/http/template) OK Template這個就完結了!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看