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

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


咨詢
建站咨詢
