Golang 學習開始!
目標:編寫一個golang web專案 goblog
以下博文需要你懂一些基本的程式設計知識 如:物件 if switch 變數….
以下博文都是為了這個目標而編寫….
Golang 建立一個簡單的web程式
注意:golang程式中只能使用 “”雙引號
使用golang基本庫fmt
net/http
import (
"fmt"
"net/http"
)
建立檔案main.go
這個檔案是go 程式的入口檔案必須定義
// main檔案必須定義 package main代表其是入口檔案
// 接下來的程式碼示例將省略這個檔案頭 用...表示
package main
// 你的程式碼業務邏輯
func main() {
}
使用net/http
建立一個簡單的web程式 輸出:hello golang
...
// 另一個寫法 import "net/http" 只引入一個包、庫
import {
"net/http"
"fmt"
}
// 處理請求 w & r 代表此方法必須實現的兩個引數
// http.ResponseWriter 這個你需要響應的物件 例如 fmt.Fprint(w,"hello golang")
// http.Request 這個是客戶端的請求資訊
func handleFunc(w http.ResponseWriter, r *http.Request){
// 響應請求 並寫入響應資訊
fmt.Fprint(w,"hello golang")
}
func main() {
// ‘/’ 可理解為 ‘根’請求
http.HandleFunc("/",handleFunc)
// 8080為監聽埠 nil暫時可不管
http.listenAndServe(":8080",nil)
}
路由
上面的例子我們編寫了一個簡單的web程式 我們現在來給這個程式新增一些路由讓這個程式響應不同的請求
...
func handlerFunc(w http.ResponseWriter, r *http.Request){
// 定義一個變數
// golang和PHP的不同是 單獨定義變數必須定義變數型別
// 下面的程式碼可以寫成 Wstr := "" 可省略 var 關鍵字
var Wstr string
// r http.Request 在該物件中取出使用者的請求連結
// 這裡不建議使用if(條件太多沒法記)
switch r.URL.Path {
case "/":
Wstr = "<h1>Hello, 這裡是 goblog!</h1>"
break
case "/about":
Wstr = "此部落格是用以記錄程式設計筆記,如您有反饋或建議,請聯絡 "+
"<a href=\"mailto:summer@example.com\">summer@example.com</a>"
break
default:
Wstr = "<h1>請求頁面未找到 :(</h1>"+
"<p>如有疑惑,請聯絡我們。</p>"
}
// 列印資訊到請求
fmt.Fprint(w,Wstr)
}
...
響應型別及狀態碼 Content-Type 參考
// 響應404
// http.StatusNotFound 為http包 預定義的狀態碼 你也可以寫成這樣 w.WriteHeader(404)
w.WriteHeader(http.StatusNotFound)
// 響應型別 Content-Type 以下程式碼表示響應內容為 html charset編碼
//當然你也可以設定為其它,參考該連結:https://tool.oschina.net/commons/
w.Header().Set("Content-Type","text/html; charset=utf-8")
其它
設定請求代理
預設golang的代理是官方的連結 以下命令可檢視golang預設配置
go env
更改
go env -w GOPROXY=https://goproxy.cn
godoc 離線文件
下載
go get golang.org/x/tools/cmd/godoc
使用 6060埠號
godoc -http=:6060
需要注意的是這個文件全是英文 中文版的要自己找!
自動過載
主要解決問題是頻繁的停止&&重新編譯
下載&&安裝
go get -u github.com/cosmtrek/air
使用
air
檢視版本
air -v
不知道為啥 我使用air -v 展示的是下面這樣的
沒有版本號….不過不影響使用
結語
多看文件、多看教程…
暫時分享到這裡
本作品採用《CC 協議》,轉載必須註明作者和本文連結