新聞中心
?GOFrame?是一款基礎(chǔ)設(shè)施建設(shè)比較完善的模塊化框架,?WebServer?模塊是其中比較核心的模塊,我們這里將Web服務(wù)開發(fā)作為框架入門的選擇,便于大家更容易學(xué)習(xí)和理解。

十載的梁河網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整梁河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“梁河網(wǎng)站設(shè)計”,“梁河網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
?GoFrame?框架提供了非常強大的?WebServer?,由?ghttp?模塊實現(xiàn)。實現(xiàn)了豐富完善的相關(guān)組件,例如:?Router?、?Cookie?、?Session?、路由注冊、配置管理、模板引擎、緩存控制等等,支持熱重啟、熱更新、多域名、多端口、多實例、?HTTPS?、?Rewrite?、?PProf?等等特性。
接口文檔地址:
https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp
哈嘍世界
老規(guī)矩,我們先來一個?Hello World?:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("哈嘍世界!")
})
s.Run()
}這便是一個最簡單的服務(wù),默認(rèn)情況下它不支持靜態(tài)文件處理,只有一個功能,訪問 ?http://127.0.0.1/? 的時候,它會返回哈嘍世界!。
任何時候,您都可以通過?g.Server()?方法獲得一個默認(rèn)的?Server?對象,該方法采用單例模式設(shè)計,也就是說,多次調(diào)用該方法,返回的是同一個?Server?對象。通過?Run()?方法執(zhí)行?Server?的監(jiān)聽運行,在沒有任何額外設(shè)置的情況下,它默認(rèn)監(jiān)聽?80?端口。
關(guān)于其中的路由注冊,我們將會在后續(xù)的章節(jié)中介紹,我們繼續(xù)來看看如何創(chuàng)建一個支持靜態(tài)文件的?Server?。
靜態(tài)服務(wù)
創(chuàng)建并運行一個支持靜態(tài)文件的?WebServer?:
package main
import (
"github.com/gogf/gf/v2/frame/g"
)
func main() {
s := g.Server()
s.SetIndexFolder(true)
s.SetServerRoot("/home/www/")
s.Run()
}創(chuàng)建了?Server?對象之后,我們可以使用?Set*?方法來設(shè)置?Server?的屬性,我們這里的示例中涉及到了兩個屬性設(shè)置方法:
- ?
SetIndexFolder?用來設(shè)置是否允許列出?Server?主目錄的文件列表(默認(rèn)為?false?)。 - ?
SetServerRoot?用來設(shè)置?Server?的主目錄(類似?nginx?中的?root?配置,默認(rèn)為空)。
?Server?默認(rèn)情況下是沒有任何主目錄的設(shè)置,只有設(shè)置了主目錄,才支持對應(yīng)主目錄下的靜態(tài)文件的訪問。
多端口監(jiān)聽
?Server?同時支持多端口監(jiān)聽,只需要往?SetPort?參數(shù)設(shè)置多個端口號即可(當(dāng)然,針對于?HTTPS?服務(wù),我們也同樣可以通過?SetHTTPSPort?來設(shè)置綁定并支持多個端口號的監(jiān)聽,?HTTPS?服務(wù)的介紹請參看后續(xù)對應(yīng)章節(jié))。
我們來看一個例子:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request){
r.Response.Writeln("go frame!")
})
s.SetPort(8100, 8200, 8300)
s.Run()
}執(zhí)行以上示例后,我們訪問以下URL將會得到期望的相同結(jié)果:
http://127.0.0.1:8100/
http://127.0.0.1:8200/
http://127.0.0.1:8300/多實例支持
?Server?支持同一進程多實例運行,下面我們來看一個例子:
package main
import (
"github.com/gogf/gf/v2/frame/g"
)
func main() {
s1 := g.Server("s1")
s1.SetPort(8080)
s1.SetIndexFolder(true)
s1.SetServerRoot("/home/www/static1")
s1.Start()
s2 := g.Server("s2")
s2.SetPort(8088)
s2.SetIndexFolder(true)
s2.SetServerRoot("/home/www/static2")
s2.Start()
g.Wait()
}可以看到我們在支持多個?Server?的語句中,給?g.Server?方法傳遞了不同的單例名稱參數(shù),該參數(shù)用于標(biāo)識不同的?Server?實例,因此需要保證唯一性。如果需要獲取同一個?Server?實例,那么傳入同一個名稱即可。例如在多個?goroutine?中,或者不同的模塊中,都可以通過?g.Server?獲取到同一個?Server?實例。
域名綁定
?Server?支持多域名綁定,并且不同的域名可以綁定不同的服務(wù)。
我們來看一個簡單的例子:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func Hello1(r *ghttp.Request) {
r.Response.Write("127.0.0.1: Hello1!")
}
func Hello2(r *ghttp.Request) {
r.Response.Write("localhost: Hello2!")
}
func main() {
s := g.Server()
s.Domain("127.0.0.1").BindHandler("/", Hello1)
s.Domain("localhost").BindHandler("/", Hello2)
s.Run()
}我們訪問 http://127.0.0.1/ 和 http://localhost/ 可以看輸出不同的內(nèi)容。
此外,?Domain?方法支持多個域名參數(shù),使用英文“?,?”號分隔,例如:
s.Domain("localhost1,localhost2,localhost3").BindHandler("/", Hello2)這條語句的表示將?Hello2?方法注冊到指定的3個域名中(?localhost1~3?),對其他域名不可見。
需要注意的是:?Domain?方法的參數(shù)必須是準(zhǔn)確的域名,不支持泛域名形式,例如:?*.goframe.org?或者?.goframe.org?是不支持的,?api.goframe.org?或者?goframe.org?才被認(rèn)為是正確的域名參數(shù)。
路由特性
?Server?提供了非常出色的路由特性,我們先來看一個簡單的示例:
package main
import (
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/frame/g"
)
func main() {
s := g.Server()
s.BindHandler("/{class}-{course}/:name/*act", func(r *ghttp.Request) {
r.Response.Writef(
"%v %v %v %v",
r.Get("class"),
r.Get("course"),
r.Get("name"),
r.Get("act"),
)
})
s.SetPort(8199)
s.Run()
}這是一個混合的路由規(guī)則示例,用于展示某個班級、某個學(xué)科、某個學(xué)生、對應(yīng)的操作,運行后,我們可以通過例如該地址: http://127.0.0.1:8199/class3-math/john/score 看到測試結(jié)果。在頁面上你可以看得到對應(yīng)的路由規(guī)則都被一一解析,業(yè)務(wù)層可以根據(jù)解析的參數(shù)進行對應(yīng)的業(yè)務(wù)邏輯處理。
配置管理
?GoFrame?的核心組件均實現(xiàn)了便捷的配置管理特性,僅需通過配置文件的修改即可實現(xiàn)組件的功能配置。大多數(shù)的場景中我們推薦使用配置文件來管理組件的配置。
平滑重啟
?Server?內(nèi)置支持平滑重啟特性。
HTTPS支持
?Server?支持?HTTPS?服務(wù),并且也同時支持單進程提供?HTTP?&?HTTPS?服務(wù)。
本文名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame WEB服務(wù)開發(fā)-開始使用
當(dāng)前URL:http://m.5511xx.com/article/cccejoe.html


咨詢
建站咨詢
