精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 Go 創建一個 Web 應用

開發 前端
如果你看到上面的結果,你已經成功地創建了你的第一個 Golang 網絡和文件服務器。恭喜!如果您想進一步探索 Golang Web 服務器,Golang HTTP 包文檔中有很多很好的例子。

客戶端/服務器

假設你開發了一個使用 Go 語言編寫的程序來管理你的照片庫,這個程序可以在你的電腦上處理你的照片。你可能想與其他家庭成員分享這些照片,為此,你可以通過電子郵件發送包含所有照片的附件。但如果你拍了一萬張照片,這種解決方案可能是不可行的。

您可以將內容自動上傳到您最喜愛的社交網絡。如果您必須一次處理一張照片,該操作可能會變得非常耗時。另一種解決方案可能是將您的程序直接插入社交網絡系統,以編程方式上傳圖片。

我們可以借助社交網絡公開的 API 來做到這一點。您可以通過直接調用它們的 API 將圖片推送到 for 循環中。

在這種情況下,您將使用一個 API。你是客戶端。社交網絡代表服務器。

調用 API 意味著按照精確的文檔向 Web 服務器發出 HTTP(s) 請求。客戶端和服務器這兩個術語很重要,您必須記住它們。作為客戶端,我們使用(或消費)API。服務器是一個計算機程序,旨在接受和響應客戶端的 API 調用。

圖片

Go 語言在創建簡單高效的 Web 服務器方面很有優勢。Go 語言提供了內置的 HTTP 包,其中包含了快速創建 Web 或文件服務器所需的實用工具。這使得使用 Go 語言創建 Web 服務器和 Web 服務變得簡單和高效。

創建 server.go 文件

在上一篇文章中,我們學習了 net/http 包中的 Request 和 Response ,所以這里我們可以直接使用:

package main

import (
 "fmt"
 "log"
 "net/http"
)

func main() {

  http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
   fmt.Fprintf(w, "Hello!")
  })

 fmt.Printf("Starting server at port 8088\n")

 if err := http.ListenAndServe(":8088", nil); err != nil {
  log.Fatal(err)
 }
}

運行 go run server.go ,可以在終端上看到如下輸出:

Starting server at port 8088

在此階段,我們將創建一個實際在端口 8088 上提供服務并可以響應傳入 GET 請求的 Web 服務器。讓我們在端口 8088 啟動 Web 服務器。ListenAndServe() 方法由我們在第一步中導入的 http 數據包導出。此方法允許我們啟動 Web 服務器并指定端口以偵聽傳入請求。請注意,端口參數需要作為以冒號標點符號開頭的字符串傳遞。第二個參數接受一個處理程序來為 HTTP/2 配置服務器,將 nil 作為第二個參數傳遞。

我們將使用 HandleFunc() 函數將路由處理程序添加到 Web 服務器。第一個參數接受它需要監聽的路徑 /hello。在這里,您告訴服務器監聽對 http://localhost:8088/hello 的任何傳入請求。第二個參數接受一個函數,該函數包含正確響應請求的業務邏輯。

默認情況下,此函數接受 ResponseWriter 以發回響應,并接受 Request 對象以提供有關請求本身的更多信息。例如,您可以訪問有關已發送標頭的信息,這對于驗證請求很有用。

圖片

如您所見,處理程序發送了一個“Hello!”消息,因為我們將此響應傳遞給 ResponseWriter。

路由添加基本校驗

不用說,安全很重要。讓我們探索一些增強 Go Web 服務器安全性的基本策略。在我們這樣做之前,我們應該花點時間來提高代碼的可讀性。讓我們創建 helloHandler 函數,它包含與 /hello 請求相關的所有邏輯。

func helloHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/hello" {
        http.Error(w, "404 not found.", http.StatusNotFound)
        return
    }

    if r.Method != "GET" {
        http.Error(w, "Method is not supported.", http.StatusNotFound)
        return
    }


    fmt.Fprintf(w, "Hello!")
}

此處理程序使用 Request 對象檢查請求的路徑是否正確。這是一個非常基本的示例,說明如何使用 Request 對象。

如果路徑不正確,服務器將向用戶返回 StatusNotFound 錯誤。要向用戶寫入錯誤,您可以使用 http.Error 方法。請注意,StatusNotFound 代碼對應于 404 錯誤。所有狀態代碼都可以在 Golang 文檔中找到。

接下來,我們添加一個檢查來驗證請求的類型。如果該方法不對應于 GET,則服務器返回一個新錯誤。當兩個檢查都通過時,服務器返回其成功響應“Hello!”。

我們需要做的最后一件事是修改 main() 函數中的 handleFunc 函數以接受上面的 helloHandler 函數。

http.HandleFunc("/hello", helloHandler)

完整的 server.go 文件如下:

package main

import (
 "fmt"
 "log"
 "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
 if r.URL.Path != "/hello" {
  http.Error(w, "404 not found", http.StatusNotFound)
  return
 }

 if r.Method != "GET" {
  http.Error(w, "Method is not supported", http.StatusNotFound)
  return
 }

 fmt.Fprintf(w, "Hello!")
}

func main() {

 http.HandleFunc("/hello", helloHandler)

 fmt.Printf("Starting server at port 8088\n")

 if err := http.ListenAndServe(":8088", nil); err != nil {
  log.Fatal(err)
 }
}

接下來,我們將使用 go run server.go 啟動 Go Web 服務器。您可以使用 Postman 或 cURL 等工具向 http://localhost:8088/hello 發送 POST 請求來測試您的安全性。我們將得到與上一次相同的結果。

啟動靜態 Web 服務器

在這一步中,我們將創建一個簡單的文件服務器來托管靜態文件。這將是對 Web 服務器的一個非常簡單的添加。為確保我們有內容可在 Web 服務器上提供服務,讓我們新建一個位于 static 文件夾中的 index.html 文件。為了簡單起見,只需在文件中添加一個標題為“Go Server”的標題。如果您愿意,可以添加更多文件或樣式文件以使您的 Web 服務器看起來更漂亮一些。

新建一個 index.html 文件:

<html>
  <head>
    <title>Learn Go</title>
  </head>
  <body>
    <h2>Go Server</h2>
  </body>
</html>

要為 static 文件夾提供服務,您必須向 server.go 添加兩行代碼。第一行代碼使用 FileServer 函數創建文件服務器對象。此函數接受 http.Dir 類型的路徑。因此,我們必須將字符串路徑“./static”轉換為 http.Dir 路徑類型。

不要忘記指定 Handle 路由,它接受路徑和文件服務器。此函數的作用與 HandleFunc 函數相同,但有一些細微差別。有關 FileServer 對象的更多信息,請查看文檔。

func main() {
    fileServer := http.FileServer(http.Dir("./static")) 
    http.Handle("/", fileServer)
    http.HandleFunc("/hello", helloHandler)


    fmt.Printf("Starting server at port 8088\n")
    if err := http.ListenAndServe(":8088", nil); err != nil {
        log.Fatal(err)
    }
}

是時候嘗試代碼了。使用 go run server.go 啟動服務器并訪問 http://localhost:8088/。你應該看到:

圖片

接受表單提交 POST 請求

最后,Web 服務器必須響應表單提交。讓我們向 static 文件夾中的 form.html 文件添加一些內容。請注意,表單操作已發送到 /form。這意味著來自表單的 POST 請求將被發送到 http://localhost:8088/form。表單本身要求輸入兩個變量:name 和 address。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <div>
      <form method="POST" actinotallow="/form">
        <label>Name</label><input name="name" type="text" value="" />
        <label>Address</label><input name="address" type="text" value="" />
        <input type="submit" value="submit" />
      </form>
    </div>
  </body>
</html>

下一步是創建處理程序來接受 /form 請求。 form.html 文件已經通過 FileServer 提供,可以通過 http://localhost:8088/form.html 訪問。

首先,該函數必須調用 ParseForm() 來解析原始查詢并更新 r.PostForm 和 r.Form。這將允許我們通過 r.FormValue 方法訪問 name 和 address 值。

在函數的末尾,我們使用 fmt.Fprintf 將這兩個值寫入 ResponseWriter。

func formHandler(w http.ResponseWriter, r *http.Request) {
    if err := r.ParseForm(); err != nil {
        fmt.Fprintf(w, "ParseForm() err: %v", err)
        return
    }
    fmt.Fprintf(w, "POST request successful")
    name := r.FormValue("name")
    address := r.FormValue("address")

    fmt.Fprintf(w, "Name = %s\n", name)
    fmt.Fprintf(w, "Address = %s\n", address)
}

不要忘記將新的表單處理程序路由添加到 main() 函數。

http.HandleFunc("/form", formHandler)

最后的 server.go 文件如下:

package main

import (
 "fmt"
 "log"
 "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
 if r.URL.Path != "/hello" {
  http.Error(w, "404 not found", http.StatusNotFound)
  return
 }

 if r.Method != "GET" {
  http.Error(w, "Method is not supported", http.StatusNotFound)
  return
 }

 fmt.Fprintf(w, "Hello!")
}

func formHandler(w http.ResponseWriter, r *http.Request) {
 if err := r.ParseForm(); err != nil {
  fmt.Fprintf(w, "ParseForm() err: %v", err)
  return
 }
 fmt.Fprintf(w, "POST request successful\n")
 name := r.FormValue("name")
 address := r.FormValue("address")

 fmt.Fprintf(w, "Name = %s\n", name)
 fmt.Fprintf(w, "Address = %s\n", address)
}

func main() {

 // http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
 //  fmt.Fprintf(w, "Hello!")
 // })

 fileServer := http.FileServer(http.Dir("./static"))
 http.Handle("/", fileServer)
 http.HandleFunc("/hello", helloHandler)

 http.HandleFunc("/form", formHandler)

 fmt.Printf("Starting server at port 8088\n")

 if err := http.ListenAndServe(":8088", nil); err != nil {
  log.Fatal(err)
 }
}

表單處理程序測試

我們可以通過使用 go run server.go 啟動服務器來測試表單。當服務器啟動時,訪問 http://localhost:8088/form.html。您應該看到兩個輸入字段和一個提交按鈕。

圖片

填寫完表格后,點擊提交按鈕。服務器應處理您的 POST 請求并在 http://localhost:8088/form 響應頁面上向您顯示結果,例如以下響應:

圖片

如果你看到上面的結果,你已經成功地創建了你的第一個 Golang 網絡和文件服務器。恭喜!如果您想進一步探索 Golang Web 服務器,Golang HTTP 包文檔中有很多很好的例子。

官方文檔:Writing Web Applications

責任編輯:武曉燕 來源: 宇宙之一粟
相關推薦

2014-10-15 11:01:02

Web應用測試應用

2014-04-14 15:54:00

print()Web服務器

2011-05-11 10:58:39

iOS

2019-07-05 08:39:39

GoSQL解析器

2009-01-19 11:07:42

C#Web.NET

2017-06-08 15:53:38

PythonWeb框架

2022-06-07 07:21:19

Python內置庫命令行

2019-05-08 14:37:49

Web服務器HTTP

2022-09-19 08:07:28

Goweb 程序

2021-04-15 08:55:51

Go struc代碼

2021-04-25 08:58:00

Go拍照云盤

2021-11-10 09:10:46

JS 錄屏功能JavaScript

2024-01-02 00:18:56

Buffalo項目Go Web框架

2010-08-13 13:05:30

Flex應用程序

2020-12-08 08:46:07

GoJava工具

2022-04-01 15:18:42

Web 框架網絡通信

2014-11-25 14:04:59

DockerDocker Nodeweb應用部署

2014-05-26 09:13:46

DockerPython

2009-11-28 20:08:20

谷歌ChromeWeb應用

2009-10-19 14:14:19

OSGi Web應用
點贊
收藏

51CTO技術棧公眾號

欧美片第1页综合| 国产一区二区三区亚洲综合 | 伊人免费视频二| 五月婷婷视频在线观看| 久久综合九色综合97婷婷| 国产精品爽爽ⅴa在线观看| 东方av正在进入| 欧美交a欧美精品喷水| 欧洲一区二区三区在线| 亚洲五码在线观看视频| 看电影就来5566av视频在线播放| 久久成人18免费观看| 国内伊人久久久久久网站视频 | 中文字幕日韩欧美一区二区三区| 翡翠波斯猫1977年美国| 日韩精选在线观看| 亚洲国产二区| 久久亚洲精品小早川怜子66| jizz日本免费| 日本超碰一区二区| 欧美日韩久久久久久| 成年人午夜免费视频| 高清全集视频免费在线| 久久蜜桃一区二区| 国产精品一区二区欧美黑人喷潮水 | 国产精品精品一区二区三区午夜版| 欧美日韩在线国产| 波多野结衣一区| 亚洲精品99999| 91视频免费入口| 久久91视频| 色欧美乱欧美15图片| h无码动漫在线观看| 含羞草www国产在线视频| 久久久国产一区二区三区四区小说 | 蜜桃精品噜噜噜成人av| 精品免费国产一区二区三区四区| 91视频这里只有精品| 自拍偷自拍亚洲精品被多人伦好爽| 夜夜精品浪潮av一区二区三区| 一本色道久久综合亚洲二区三区| 国产黄色在线| 国产蜜臀av在线一区二区三区| 九九99久久| av女名字大全列表| 99精品热视频| 玖玖玖精品中文字幕| 手机在线精品视频| 99视频热这里只有精品免费| 丁香婷婷久久久综合精品国产| av网站免费大全| 国产一区二区伦理| 亚洲专区在线视频| wwwav在线播放| 国产成人免费xxxxxxxx| 99视频免费观看| 成人av一区二区三区在线观看| 91超碰碰碰碰久久久久久综合| 日韩电影免费网址| 精品亚洲va在线va天堂资源站| 国产精品久久不卡| 台湾佬综合网| 国产亚洲精品一区二555| 在线免费观看日韩av| 久久99久久人婷婷精品综合| 亚洲日本中文字幕免费在线不卡| 自拍偷拍中文字幕| 精品一区二区三区在线| 中文字幕日韩视频| 亚洲欧美小视频| 99成人免费视频| 国产精品99导航| 一二三区在线播放| 国产成人啪免费观看软件| 国产伦精品一区二区| 色在线免费视频| 国产目拍亚洲精品99久久精品| 中文字幕不卡每日更新1区2区| 成人影欧美片| 天涯成人国产亚洲精品一区av| 青青在线视频观看| 亚洲精品大片| 亚洲国产精品嫩草影院久久| 亚洲a v网站| 亚洲一区二区三区| 国自产精品手机在线观看视频| 日韩综合在线观看| 精品一二线国产| 国产区一区二区| 中文字幕日本在线观看| 一区二区日韩电影| 国产欧美高清在线| 麻豆国产精品| 亚洲美女久久久| 乱老熟女一区二区三区| 亚洲精品看片| 成人黄色免费在线观看| 午夜福利视频一区二区| 国产精品白丝在线| 野外做受又硬又粗又大视频√| 欧美成人黑人| 日韩精品自拍偷拍| 第一次破处视频| 国产在线日韩| 国产精品入口日韩视频大尺度| 亚洲黄色片视频| 国产日韩av一区| 日本中文字幕亚洲| 欧美v亚洲v综合v国产v仙踪林| 精品1区2区在线观看| 国产黄色片在线| 国产欧美亚洲一区| 亚洲一区二区三区xxx视频| 欧洲毛片在线| 午夜成人在线视频| 亚洲色图欧美自拍| heyzo久久| 2018日韩中文字幕| 亚洲风情第一页| 久久精品视频免费| 一级黄色片播放| 欧美videos粗暴| 在线日韩av观看| 亚洲久久在线观看| 成人性视频免费网站| 性欧美18一19内谢| 国产成人亚洲一区二区三区| 日韩精品极品视频| 国产精品第56页| 精久久久久久久久久久| 日日骚一区二区网站| www在线观看黄色| 欧美videofree性高清杂交| 91动漫免费网站| 日本强好片久久久久久aaa| 精品欧美日韩在线| av色在线观看| 精品噜噜噜噜久久久久久久久试看| 亚洲一级二级片| 久久精品国产99| 亚洲成色最大综合在线| 外国电影一区二区| 国产亚洲一级高清| 成人免费一级片| 欧美激情综合网| 欧美男女交配视频| 国产精品久久久乱弄| 国产欧美精品va在线观看| aaa日本高清在线播放免费观看| 在线中文字幕不卡| 国产成人免费观看网站| 日本视频一区二区三区| 亚洲综合第一| 日韩美香港a一级毛片| 日韩小视频在线观看| 国产乱人乱偷精品视频| 亚洲视频免费观看| 三级黄色片免费观看| 国产精品大片| 好吊色欧美一区二区三区四区| 僵尸再翻生在线观看免费国语| 亚洲成色777777女色窝| 欧美一二三区视频| 国产欧美日韩不卡| 国产美女18xxxx免费视频| 一本一本久久a久久综合精品| 亚洲xxxxx电影| 都市激情久久综合| 亚洲欧美日韩图片| 中文字幕在线视频免费| 亚洲欧美福利一区二区| 中文字幕无人区二| 欧美一级专区| 亚洲欧洲久久| 亚洲一区二区三区中文字幕在线观看| 久久久中精品2020中文| 男人的天堂在线| 欧美丰满一区二区免费视频| 69av视频在线| 26uuu亚洲综合色欧美| 久久99999| 欧美先锋影音| 欧美激情第六页| 自拍偷拍亚洲| 91精品国产亚洲| porn视频在线观看| 日韩亚洲欧美高清| 国产精品va无码一区二区三区| 国产精品人成在线观看免费 | 日韩福利一区| 日韩在线不卡视频| 香港三日本三级少妇66| 欧美日韩在线观看一区二区| 久久网免费视频| 国产日韩精品一区二区三区| 四虎国产精品永久免费观看视频| 国内精品福利| 一级做a爰片久久| 欧美一区 二区| 亚洲综合小说区| 久久野战av| 久久久久久欧美| √新版天堂资源在线资源| 亚洲黄色www| 99热这里只有精品在线| 色婷婷激情综合| 国产精品成人av久久| 一区精品在线播放| 中文字幕国产综合| 高清成人在线观看| 爱爱爱爱免费视频| 日韩在线一区二区| 亚洲 高清 成人 动漫| 一区二区蜜桃| 一本久道久久综合| 欧美性感美女一区二区| 精品免费一区二区三区蜜桃| 香蕉大人久久国产成人av| 国产精品久久综合av爱欲tv| 密臀av在线播放| 久久久久久尹人网香蕉| 国内精品久久久久国产| 中文精品99久久国产香蕉| 日韩大胆人体| 亚洲福利视频网| 亚洲乱码国产乱码精品精软件| 欧美精品自拍偷拍动漫精品| 精品一区二三区| 色琪琪一区二区三区亚洲区| 日韩毛片在线播放| 亚洲成人免费在线观看| 九九热只有精品| 亚洲黄一区二区三区| 日本裸体美女视频| 亚洲欧洲精品一区二区三区 | 日韩精品一卡| 日韩国产伦理| 国际精品欧美精品| 日韩欧美视频一区二区| 国产在线观看91一区二区三区 | 三级网站免费看| 国产一区二区不卡| 国产亚洲色婷婷久久| 国模少妇一区二区三区| 三年中文在线观看免费大全中国| 麻豆极品一区二区三区| 午夜宅男在线视频| 精品在线播放免费| 亚洲免费成人在线视频| 国产曰批免费观看久久久| 一区二区三区国产好的精华液| 美女国产一区二区三区| 色播五月激情五月| 国产乱理伦片在线观看夜一区| 午夜免费福利网站| 国产91丝袜在线观看| www.啪啪.com| 91麻豆免费在线观看| 日韩一级av毛片| 国产精品伦理在线| 日本中文字幕免费在线观看| 亚洲精品国产一区二区精华液 | 欧美日韩精品电影| 91成品人影院| 欧美成人精品3d动漫h| 三级在线观看网站| 亚洲色图美腿丝袜| 日本视频不卡| 久久久亚洲精选| 最近高清中文在线字幕在线观看1| 国产ts一区二区| 日韩一区二区三区四区五区| 99re在线视频观看| 香蕉久久精品| 正义之心1992免费观看全集完整版| 欧美激情日韩| 黄色片久久久久| 国产毛片精品视频| 成年人的黄色片| 国产精品美女久久久久久| 欧美成人精品欧美一级| 狠狠躁18三区二区一区| 亚洲综合网av| 亚洲国产日韩精品在线| 中国日本在线视频中文字幕| 欧美日本高清一区| 黑人巨大亚洲一区二区久| 91人成网站www| 美女一区二区在线观看| 色吧亚洲视频| 亚洲大黄网站| www.com污| 91热门视频在线观看| 黄色片网站在线播放| 偷拍与自拍一区| 国产乱淫av片免费| 亚洲女人天堂色在线7777| 成人直播在线| 国产精品福利在线观看| 国产suv精品一区| 中文视频一区视频二区视频三区| 国产情侣一区| 免费不卡av网站| 国产精品网站在线观看| 日韩黄色在线视频| 91精品啪在线观看国产60岁| 青青免费在线视频| 欧美精品久久久久久久免费观看| 69堂免费精品视频在线播放| 国产免费一区二区| 亚洲久久久久| 国产原创精品在线| 久久免费国产精品| 免费在线观看黄网站| 欧美一区二区三区视频在线| 成人h小游戏| 日韩男女性生活视频| 久久99精品久久久久久欧洲站| 亚洲AV无码成人精品一区| 老牛嫩草一区二区三区日本 | 中文天堂在线一区| 国产成人在线免费视频| 欧美成人精品高清在线播放| 成人看av片| 国产欧美日韩中文字幕| 欧美人与牛zoz0性行为| www一区二区www免费| 成人免费高清在线| 久草视频手机在线观看| 欧美一级二级三级乱码| 里番在线观看网站| 国产免费观看久久黄| 国产一区国产二区国产三区| 亚洲熟妇av一区二区三区| 91亚洲资源网| 亚洲日本韩国在线| 日韩电影大片中文字幕| 免费成人在线电影| 精品乱色一区二区中文字幕| 国产一区日韩欧美| 在线观看免费视频国产| 一区二区三区欧美| 亚洲美女综合网| 欧美激情在线观看视频| 国产 日韩 欧美 综合 一区| 久操手机在线视频| 99久久免费国产| 制服.丝袜.亚洲.中文.综合懂色| 国产视频丨精品|在线观看| 九色porny视频在线观看| 久久久久久久久久久久久久一区 | 超碰免费在线| 国产精品揄拍500视频| 98精品视频| 亚洲欧美一区二区三区不卡| 亚洲乱码国产乱码精品精可以看| 99久久国产热无码精品免费| 欧美乱妇高清无乱码| 国产精品玖玖玖在线资源| 国产毛片视频网站| 久久婷婷色综合| 国产精品xxxxxx| 久久久黄色av| av成人资源| www.亚洲天堂网| 中文字幕av一区二区三区免费看| 亚洲影院一区二区三区| 欧美大尺度在线观看| 精品网站aaa| 99热这里只有精品在线播放| 综合激情成人伊人| 涩涩视频免费看| 国产精品成人aaaaa网站| 亚洲欧洲中文字幕| 国产一级二级视频| 欧美伊人久久久久久久久影院| 黄色网址在线免费播放| 国产精品一区而去| 日本女优在线视频一区二区| 婷婷久久综合网| 日韩电影大片中文字幕| 四虎影视成人精品国库在线观看| 大片在线观看网站免费收看| 91在线视频在线| 国产情侣自拍小视频| 97国产精品视频| 天天av综合| 日批在线观看视频| 欧美日韩在线播| h片精品在线观看| 亚洲丰满在线| av动漫一区二区| 国产绿帽刺激高潮对白| 51精品在线观看| 亚洲精品成人无限看| 免费在线观看成年人视频| 91精品国产综合久久久蜜臀粉嫩 | 精品电影一区| 国产一二三av| 精品视频偷偷看在线观看|