一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Go語言實現的一個簡單Web服務器

Go語言實現的一個簡單Web服務器

2020-04-09 13:59junjie Golang

這篇文章主要介紹了Go語言實現的一個簡單Web服務器,本文先是給出一個使用http包建立的Web服務器源碼,并對比了其它編程語言,需要的朋友可以參考下

Web是基于http協議的一個服務,Go語言里面提供了一個完善的net/http包,通過http包可以很方便的就搭建起來一個可以運行的Web服務。同時使用這個包能很簡單地對Web的路由,靜態文件,模版,cookie等數據進行設置和操作。

http包建立Web服務器

 

復制代碼 代碼如下:


package main

 

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

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()  //解析參數,默認是不會解析的
    fmt.Println(r.Form)  //這些信息是輸出到服務器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello astaxie!") //這個寫入到w的是輸出到客戶端的
}

func main() {
    http.HandleFunc("/", sayhelloName) //設置訪問的路由
    err := http.ListenAndServe(":9090", nil) //設置監聽的端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

 

上面這個代碼,我們build之后,然后執行web.exe,這個時候其實已經在9090端口監聽http鏈接請求了。

在瀏覽器輸入http://localhost:9090

可以看到瀏覽器頁面輸出了Hello astaxie!

可以換一個地址試試:http://localhost:9090/?url_long=111&url_long=222

看看瀏覽器輸出的是什么,服務器輸出的是什么?

在服務器端輸出的信息如下:

Go語言實現的一個簡單Web服務器

圖3.8 用戶訪問Web之后服務器端打印的信息

我們看到上面的代碼,要編寫一個Web服務器很簡單,只要調用http包的兩個函數就可以了。

如果你以前是PHP程序員,那你也許就會問,我們的nginx、apache服務器不需要嗎?Go就是不需要這些,因為他直接就監聽tcp端口了,做了nginx做的事情,然后sayhelloName這個其實就是我們寫的邏輯函數了,跟php里面的控制層(controller)函數類似。

如果你以前是Python程序員,那么你一定聽說過tornado,這個代碼和他是不是很像,對,沒錯,Go就是擁有類似Python這樣動態語言的特性,寫Web應用很方便。

如果你以前是Ruby程序員,會發現和ROR的/script/server啟動有點類似。

我們看到Go通過簡單的幾行代碼就已經運行起來一個Web服務了,而且這個Web服務內部有支持高并發的特性,我將會在接下來的兩個小節里面詳細的講解一下Go是如何實現Web高并發的。

延伸 · 閱讀

精彩推薦
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
主站蜘蛛池模板: 九九精品视频一区二区三区 | 亚洲网站大全 | 九哥草逼网 | 日韩精品在线视频观看 | 免费精品99久久国产综合精品 | 亚洲AV久久无码精品蜜桃 | 91啦在线视频 | 亚洲欧美久久婷婷爱综合一区天堂 | 金牛网155755水心论坛黄大父母 | 国产里番| 我的奶头被客人吸的又肿又红 | 国产精品边做边接电话在线观看 | 暴露狂婷婷 | 亚欧成人一区二区 | 亚洲婷婷在线视频 | 日比免费视频 | 啪哆哆| 九九精品视频一区二区三区 | 17个农民工婉莹第一部 | 很黄的孕妇a级黄毛片 | 爱情岛论坛自拍永久入口 | 亚洲欧洲日产国码天堂 | 午夜伦理yy44008影院 | 日韩一级片在线播放 | 久久综合久久伊人 | 日本老妇乱子伦中文视频 | 欧美理论片手机在线观看片免费 | 久久精品18 | 女教师系列三上悠亚在线观看 | bbbxxx乱大交欧美小说 | 亚洲精品午夜久久aaa级久久久 | 逼123| 亚洲欧洲日产v特级毛片 | 2019男人天堂 | aaa一级最新毛片 | 精品国产日韩亚洲一区在线 | 国产乱码免费卡1卡二卡3卡四 | 亚洲一区二区精品视频 | 午夜香蕉成视频人网站高清版 | 九九精品视频在线免费观看 | 欧美性xxx狂流白浆 欧美性f |