日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame WEB服務(wù)開(kāi)發(fā)-開(kāi)始使用

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

十載的梁河網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整梁河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“梁河網(wǎng)站設(shè)計(jì)”,“梁河網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(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ī)矩,我們先來(lái)一個(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è)功能,訪問(wèn) ?http://127.0.0.1/? 的時(shí)候,它會(huì)返回哈嘍世界!。

任何時(shí)候,您都可以通過(guò)?g.Server()?方法獲得一個(gè)默認(rèn)的?Server?對(duì)象,該方法采用單例模式設(shè)計(jì),也就是說(shuō),多次調(diào)用該方法,返回的是同一個(gè)?Server?對(duì)象。通過(guò)?Run()?方法執(zhí)行?Server?的監(jiān)聽(tīng)運(yùn)行,在沒(méi)有任何額外設(shè)置的情況下,它默認(rèn)監(jiān)聽(tīng)?80?端口。

關(guān)于其中的路由注冊(cè),我們將會(huì)在后續(xù)的章節(jié)中介紹,我們繼續(xù)來(lái)看看如何創(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*?方法來(lái)設(shè)置?Server?的屬性,我們這里的示例中涉及到了兩個(gè)屬性設(shè)置方法:

  • ?SetIndexFolder?用來(lái)設(shè)置是否允許列出?Server?主目錄的文件列表(默認(rèn)為?false?)。
  • ?SetServerRoot?用來(lái)設(shè)置?Server?的主目錄(類(lèi)似?nginx?中的?root?配置,默認(rèn)為空)。

?Server?默認(rèn)情況下是沒(méi)有任何主目錄的設(shè)置,只有設(shè)置了主目錄,才支持對(duì)應(yīng)主目錄下的靜態(tài)文件的訪問(wèn)。

多端口監(jiān)聽(tīng)

?Server?同時(shí)支持多端口監(jiān)聽(tīng),只需要往?SetPort?參數(shù)設(shè)置多個(gè)端口號(hào)即可(當(dāng)然,針對(duì)于?HTTPS?服務(wù),我們也同樣可以通過(guò)?SetHTTPSPort?來(lái)設(shè)置綁定并支持多個(gè)端口號(hào)的監(jiān)聽(tīng),?HTTPS?服務(wù)的介紹請(qǐng)參看后續(xù)對(duì)應(yīng)章節(jié))。

我們來(lái)看一個(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問(wèn)以下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)行,下面我們來(lái)看一個(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?的語(yǔ)句中,給?g.Server?方法傳遞了不同的單例名稱(chēng)參數(shù),該參數(shù)用于標(biāo)識(shí)不同的?Server?實(shí)例,因此需要保證唯一性。如果需要獲取同一個(gè)?Server?實(shí)例,那么傳入同一個(gè)名稱(chēng)即可。例如在多個(gè)?goroutine?中,或者不同的模塊中,都可以通過(guò)?g.Server?獲取到同一個(gè)?Server?實(shí)例。

域名綁定

?Server?支持多域名綁定,并且不同的域名可以綁定不同的服務(wù)。

我們來(lái)看一個(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問(wèn) http://127.0.0.1/ 和 http://localhost/ 可以看輸出不同的內(nèi)容。

此外,?Domain?方法支持多個(gè)域名參數(shù),使用英文“?,?”號(hào)分隔,例如:

s.Domain("localhost1,localhost2,localhost3").BindHandler("/", Hello2)

這條語(yǔ)句的表示將?Hello2?方法注冊(cè)到指定的3個(gè)域名中(?localhost1~3?),對(duì)其他域名不可見(jiàn)。

需要注意的是:?Domain?方法的參數(shù)必須是準(zhǔn)確的域名,不支持泛域名形式,例如:?*.goframe.org?或者?.goframe.org?是不支持的,?api.goframe.org?或者?goframe.org?才被認(rèn)為是正確的域名參數(shù)。

路由特性

?Server?提供了非常出色的路由特性,我們先來(lái)看一個(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)行后,我們可以通過(guò)例如該地址: http://127.0.0.1:8199/class3-math/john/score 看到測(cè)試結(jié)果。在頁(yè)面上你可以看得到對(duì)應(yīng)的路由規(guī)則都被一一解析,業(yè)務(wù)層可以根據(jù)解析的參數(shù)進(jìn)行對(duì)應(yīng)的業(yè)務(wù)邏輯處理。

配置管理

?GoFrame?的核心組件均實(shí)現(xiàn)了便捷的配置管理特性,僅需通過(guò)配置文件的修改即可實(shí)現(xiàn)組件的功能配置。大多數(shù)的場(chǎng)景中我們推薦使用配置文件來(lái)管理組件的配置。

平滑重啟

?Server?內(nèi)置支持平滑重啟特性。

HTTPS支持

?Server?支持?HTTPS?服務(wù),并且也同時(shí)支持單進(jìn)程提供?HTTP?&?HTTPS?服務(wù)。


網(wǎng)頁(yè)題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrame WEB服務(wù)開(kāi)發(fā)-開(kāi)始使用
鏈接URL:http://www.5511xx.com/article/cccejoe.html