iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
1
Software Development

Go繁不及備載系列 第 20

# Day20 Golang 網頁框架 gin 琴酒介紹

  • 分享至 

  • xImage
  •  

Day20 Golang 網頁框架 gin 琴酒介紹

今天開始要用到別人的程式了,
別人的程式就是比較讚。


Go語言在github上有許多的網頁框架:

每個有各自的效能評比,
今天就來介紹主流的網頁框架gin。

Gin

這是gin? 我看著倒像檸檬海水

安裝gin

golang安裝套件方法分成很多種,以下介紹其中兩種

go get 全域安裝

透過go get指令來安裝到GOPATH底下,讓所有的專案都可以用gin套件。

$ go get -u github.com/gin-gonic/gin

glide 區域安裝

透過昨天提到的glide工具來下載vendor資料夾到專案底下,只有該專案能使用gin套件。

GOPATH(go/src)中,在專案底下 創建glide.yaml檔案

package: .
import:
  - package: github.com/gin-gonic/gin
    version: ~1.3.0

在專案底下 放gin1.go程式

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {

}

接著在專案底下執行glide命令

$ glide install

使用gin

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	router := gin.Default()
	router.GET("/test", test)
	router.Run(":80")
}

func test(c *gin.Context) {
	str := []byte("ok")                      // 對於[]byte感到疑惑嗎? 因為網頁傳輸沒有string的概念,都是要轉成byte字節方式進行傳輸
	c.Data(http.StatusOK, "text/plain", str) // 指定contentType為 text/plain,就是傳輸格式為純文字啦~
}



先確定80 port沒有被任何程式佔據,否則會出現
listen tcp :80: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 的錯誤。

執行程式後,用瀏覽器打開127.0.0.1/test(本地主機localhost),成功的話能看到以下畫面
OK

回頭看看程式端,方便的地方在於可以:

  • 快速看出Client端的IP
  • 訪問了Server的哪個位置(URI)
    方便

由於是開啟/test這個URI,如果Client端訪問根目錄/的話會出現404 page not found
根目錄


什麼是網頁框架呢?

就是集大成,讓程式設計師能更快速方便開發網站的一套工具。

其實我們也可以用golang內建原生的函式來達成剛剛的範例的輸出。

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/test", test)
	http.ListenAndServe(":80", nil)
	// 傾聽 TCP 80 port及 處理服務
}

func test(writer http.ResponseWriter, request *http.Request) {
	// 把字串寫回writer
	str := []byte("ok")
	writer.Write(str)

	// 或者直接用以下這行
	fmt.Fprintf(writer, "ok")
}

Golang很好用拔!我們透過net/http官方的套件 以TCP/IP方法來傾聽80 port,
一樣可以跑、得到一樣的結果,而且不用安裝gin套件。

但就沒有那麼方便的儀板表可以來看Client訪問端的資料了。

目前這個小小程式,還感受不到網頁框架的威力。
敬請期待明天的gin


上一篇
# Day19 Go-glide 套件管理工具
下一篇
# Day21 Golang 網頁框架 gin 使用教學(GET、POST、ANY)
系列文
Go繁不及備載35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言