GoFrame 奉孝學習筆記

第一章節 GoFrame

是一款基礎設施建設比較完善的模塊化框架

GoFrame 是一款基礎設施建設比較完善的模塊化框架, Web Server 模塊是其中比較核心的模塊,我們這里將 Web 服務開發作為框架入門的選擇,便于大家更容易學習和理解。

用GOland編寫代碼

go.mod

module goframeProjectgo 1.24require github.com/gogf/gf/v2 v2.9.0require (github.com/BurntSushi/toml v1.4.0 // indirectgithub.com/clbanning/mxj/v2 v2.7.0 // indirectgithub.com/emirpasic/gods v1.18.1 // indirectgithub.com/fatih/color v1.18.0 // indirectgithub.com/fsnotify/fsnotify v1.7.0 // indirectgithub.com/go-logr/logr v1.4.2 // indirectgithub.com/go-logr/stdr v1.2.2 // indirectgithub.com/google/uuid v1.6.0 // indirectgithub.com/gorilla/websocket v1.5.3 // indirectgithub.com/grokify/html-strip-tags-go v0.1.0 // indirectgithub.com/kr/text v0.2.0 // indirectgithub.com/magiconair/properties v1.8.9 // indirectgithub.com/mattn/go-colorable v0.1.13 // indirectgithub.com/mattn/go-isatty v0.0.20 // indirectgithub.com/mattn/go-runewidth v0.0.16 // indirectgithub.com/olekukonko/tablewriter v0.0.5 // indirectgithub.com/rivo/uniseg v0.4.7 // indirectgo.opentelemetry.io/otel v1.32.0 // indirectgo.opentelemetry.io/otel/metric v1.32.0 // indirectgo.opentelemetry.io/otel/sdk v1.32.0 // indirectgo.opentelemetry.io/otel/trace v1.32.0 // indirectgolang.org/x/net v0.32.0 // indirectgolang.org/x/sys v0.28.0 // indirectgolang.org/x/text v0.21.0 // indirectgopkg.in/yaml.v3 v3.0.1 // indirect
)

?

我們先來開發一個簡單的Web Server程序。

  • 新建main.go文件

    main.go

    package mainimport ("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("Hello World Use goframeV2!")})s.SetPort(8000) //如果端口沖突,可以修改一下端口地址8088等s.Run()
    }
    

  • 配置go mod并安裝依賴
    go mod init main
    go mod tidy
    

     可以看出執行后會進行下載依賴

  • go mod init main
    go: D:\GolandProjects\goframeProject\go.mod already existsD:\GolandProjects\goframeProject>go mod tidy
    go: downloading github.com/fatih/color v1.18.0
    go: downloading go.opentelemetry.io/otel v1.32.0
    go: downloading github.com/gorilla/websocket v1.5.3
    go: downloading go.opentelemetry.io/otel/trace v1.32.0
    go: downloading github.com/olekukonko/tablewriter v0.0.5
    go: downloading golang.org/x/net v0.32.0
    go: downloading github.com/grokify/html-strip-tags-go v0.1.0
    go: downloading go.opentelemetry.io/otel/sdk v1.32.0
    go: downloading github.com/emirpasic/gods v1.18.1
    go: downloading github.com/clbanning/mxj/v2 v2.7.0
    go: downloading github.com/fsnotify/fsnotify v1.7.0
    go: downloading github.com/mattn/go-colorable v0.1.13
    go: downloading golang.org/x/sys v0.28.0
    go: downloading github.com/mattn/go-runewidth v0.0.16
    go: downloading github.com/rogpeppe/go-internal v1.13.1
    go: downloading github.com/rivo/uniseg v0.4.7
    go: downloading go.opentelemetry.io/otel/metric v1.32.0
    go: downloading github.com/go-logr/logr v1.4.2
    go: downloading github.com/go-logr/stdr v1.2.2
    go: finding module for package github.com/kr/text
    go: found github.com/kr/text in github.com/kr/text v0.2.0
    

我們來看看這段代碼:

  • 任何時候,您都可以通過 g.Server() 方法獲得一個默認的 Server 對象,該方法采用單例模式設計, 也就是說,多次調用該方法,返回的是同一個 Server 對象。其中的g組件是框架提供的一個耦合組件,封裝和初始化一些常用的組件對象,為業務項目提供便捷化的使用方式。
  • 通過Server對象的BindHandler方法綁定路由以及路由函數。在本示例中,我們綁定了/路由,并指定路由函數返回Hello World
  • 在路由函數中,輸入參數為當前請求對象r *ghttp.Request,該對象包含當前請求的上下文信息。在本示例中,我們通過r.Response返回對象直接Write返回結果信息。
  • 通過SetPort方法設置當前Server監聽端口。在本示例中,我們監聽8000端口,如果在沒有設置端口的情況下,它默認會監聽一個隨機的端口。
  • 通過 Run() 方法阻塞執行 Server 的監聽運行。

執行結果?

運行該程序,您將在終端看到類似以下日志信息:

windows環境會提示需要訪問外網。點擊確定就OK。

$ go run main.go
2024-10-27 21:30:39.412 [INFO] pid[58889]: http server started listening on [:8000]
2024-10-27 21:30:39.412 [INFO] {08a0b0086e5202184111100658330800} openapi specification is disabledADDRESS | METHOD | ROUTE |     HANDLER     | MIDDLEWARE  
----------|--------|-------|-----------------|-------------:8000   | ALL    | /     | main.main.func1 |             
----------|--------|-------|-----------------|-------------

在默認的日志打印中包含以下信息:

  • 當前進程號58889,以及監聽的地址:8000(表示監聽本機所有IP地址的8000端口)。

  • 由于框架帶有自動接口文檔生成功能,本示例中未啟用,因此提示openapi specification is disabled。 關于接口文檔的自動生成,在開發手冊中對應章節會詳細講解,本示例不作介紹。

  • 最后會打印當前Server的路由列表。由于我們只監聽了/路由,那么這里只打印了一個路由信息。在路由信息表中:

    路由字段字段描述
    ADDRESS表示該路由的監聽地址,同一個進程可以同時運行多個Server,不同的Server可以監聽不同的地址。
    METHOD表示路由監聽的HTTP Method信息,比如GET/POST/PUT/DELETE等。這里的ALL標識監聽所有的HTTP Method
    ROUTE表示監聽的具體路由地址信息。
    HANDLER表示路由函數的名稱。由于本示例使用的是閉包函數,因此看到的是一個臨時函數名稱main.main.func1
    MIDDLEWARE表示綁定到當前路由的中間件函數名稱,中間件是Server中一種經典的攔截器,后續章節中會有詳細講解,這里暫不做介紹。

運行后,我們嘗試訪問 <

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904201.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pinia實現數據持久化插件pinia-plugin-persist-uni

在學習uniapp過程中&#xff0c;看到了pinia-plugin-persist-uni插件&#xff0c;以前面試過程中也有面試過說vuex數據刷新之前的數據就丟失了&#xff0c;之前回答的是把數據存儲到數據庫或者本地存儲。pinia-plugin-persist-uni本質上數據也是本地存儲。 1、安裝 npm instal…

Git 多賬號切換及全局用戶名設置不生效問,GIT進行上傳無權限問題

解決 Git 多賬號切換及全局用戶名設置不生效問題 在軟件開發過程中&#xff0c;我們經常會使用 Git 進行版本控制。有時&#xff0c;我們需要在同一臺機器上管理多個 Git 賬號&#xff0c;最近我在進行使用git的時候因為項目要進行上傳的不同的git賬號&#xff0c;但是通過本地…

基于STM32定時器中斷講解(HAL庫)

基于STM32定時器中斷講解&#xff08;HAL庫&#xff09; 1、定時器簡單介紹 以STM32F103C8T6中幾個定時器為例&#xff1a; TIM1&#xff1a;這是一個高級定時器&#xff0c;不僅具備基本的定時中斷功能&#xff0c;還擁有內外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口以…

UE5 項目遷移 注意事項記錄

做項目的時候項目越做越大 132g的體量一旦移動復制就耗時間 這個時候遷移派上了用場 前置知識&#xff1a;會使用基本ue遷移流程 以下是遷移注意事項 遷移步驟 首先把項目插件plugins復制粘貼到新項目中其次把.project文本形式 全部復制粘貼新項目中開始遷移項目 選中要遷移的…

套接字+Socket連接

制作加載中動畫&#xff1a; 創建Panel&#xff0c;制作預制體&#xff0c;在Image游戲物體中添加DOTween插件&#xff0c;相關設置如下&#xff1a; (此為DOTween Pro,需付費&#xff0c;也可按下面的數值編寫代碼解決) Socket套接字 套接字就是將IP地址與主機端口號合并在一…

第 11 屆藍橋杯 C++ 青少組中 / 高級組省賽 2020 年真題答和案解析

一、選擇題 第 1 題 單選題 題目:表達式 ‘6’ - ‘1’ 的值是 ( ) A. 整數 5 B. 字符 5 C. 表達式不合法 D. 字符 6 答案:A 解析:在 C++ 中,字符常量以 ASCII 碼形式存儲。6 的 ASCII 碼為 54,1 的 ASCII 碼為 49,二者相減結果為 5,是整數類型,因此選 A。 第 2 題 …

使用Rust + WebAssembly提升前端渲染性能:從原理到落地

一、問題背景&#xff1a;為什么選擇WebAssembly&#xff1f; 最近在開發數據可視化大屏項目時&#xff0c;我們遇到了一個棘手的問題&#xff1a;前端需要實時渲染10萬數據點的動態散點圖&#xff0c;使用純JavaScript Canvas方案在低端設備上幀率不足15FPS。經過性能分析&a…

【沐風老師】3DMAX按元素UV修改器插件教程

3DMAX按元素UV修改器UV By Element是一個腳本化的修改器插件。對于需要創建隨機化紋理效果的用戶而言&#xff0c;3DMAX的UV By Element修改器無疑是一款高效工具&#xff0c;它將以偽隨機量偏移、旋轉和/或縮放每個元素的UV坐標。 【版本要求】 3dMax 2016及以上 【安裝方法】…

【神經網絡與深度學習】改變隨機種子可以提升模型性能?

引言 隨機種子在機器學習和數據處理領域中至關重要&#xff0c;它決定了模型訓練、數據劃分以及參數初始化的隨機性。雖然固定隨機種子能確保實驗的可重復性&#xff0c;但改變隨機種子有時會意外提升模型性能。本文將探討這一現象的潛在原因&#xff0c;并揭示隨機性如何影響…

java技術總監簡歷模板

模板信息 簡歷范文名稱&#xff1a;java技術總監簡歷模板&#xff0c;所屬行業&#xff1a;其他 | 職位&#xff0c;模板編號&#xff1a;XDNUTA 專業的個人簡歷模板&#xff0c;邏輯清晰&#xff0c;排版簡潔美觀&#xff0c;讓你的個人簡歷顯得更專業&#xff0c;找到好工作…

OpenLayers:偵聽縮放級別的變化

在實際開發中我們常常需要根據不同的縮放級別設置不同的展示效果或者執行不同的操作&#xff0c;因此偵聽縮放級別的變化就很重要。想要偵聽變化就需要依賴于OpenLayers中的事件系統&#xff0c;下面我將介紹兩個相關的事件。 一、地圖事件 moveend 1.介紹 在地圖的移動結束…

Langchain4j基于ElasticSearch的向量數據庫配置后,啟動報錯

報錯信息: co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/search] failed: [search_phase_execution_exception] all shards failedat co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:34…

如何解決 403 錯誤:請求被拒絕,無法連接到服務器

解決 403 錯誤&#xff1a;請求被拒絕&#xff0c;無法連接到服務器 當您在瀏覽網站或應用時&#xff0c;遇到 403 錯誤&#xff0c;通常會顯示類似的消息&#xff1a; The request could not be satisfied. Request blocked. We can’t connect to the server for this app o…

PyTorch 2.0編譯模式深度評測:圖優化對GPU利用率的影響

一、編譯革命的性能拐點 PyTorch 2.0的torch.compile通過TorchDynamo與XLA兩種編譯模式&#xff0c;將動態圖執行效率推向新高度。本文基于NVIDIA A100與Google TPUv4硬件平臺&#xff0c;通過ResNet-50、Transformer-XL等典型模型&#xff0c;揭示不同編譯策略對GPU資源利用率…

在CentOS環境中安裝MySQL數據庫保姆級教程

一.確認當前系統版本 1.1登錄系統&#xff0c;切換至root賬戶 如圖所示&#xff1a; 1.2&#xff1a;在終端中執行如下命令查看系統版本 cat /etc/redhat-release 二.添加 MySQL Yum 源 2.1訪問MySQL開發者專區 https://dev.mysql.com/downloads/repo/yum/ TIPS: 1.發布包命…

SpringBoot智能排課系統源碼開發與實現

概述 基于SpringBoot框架開發的智能排課系統。該系統是一款功能完善的校園管理系統&#xff0c;包含管理員、教師和學生三種角色權限&#xff0c;實現了課程管理、排課算法、成績錄入等核心功能&#xff0c;是學習SpringBoot開發和企業級項目實踐的優質資源。 主要內容 1. 管…

探秘 RocketMQ 的 DLedgerServer:MemberState 的技術解析與深度剖析

在 RocketMQ 構建高可靠、強一致性消息系統的架構中&#xff0c;DLedgerServer 扮演著舉足輕重的角色&#xff0c;而 MemberState 作為 DLedgerServer 內部用于描述節點狀態的核心類&#xff0c;更是整個分布式日志模塊穩定運行的關鍵。深入理解 MemberState 的設計理念、功能特…

字符串匹配 之 KMP算法

文章目錄 習題28.找出字符串中第一個匹配項的下標1392.最長快樂前綴 本博客充分參考靈神和知乎的另一位博主 靈神KMP算法模版 知乎博主通俗易懂講解 對于給定一個主串S和一個模式串P,如果讓你求解出模式串P在主串S中匹配的情況下的所有的開始下標簡單的做法又稱為Brute-Force算…

Nginx相關知識

目錄 一.HTTP請求數據在服務器中的傳輸與處理詳解 1.2 套字節 1.3 零拷貝技術 二.I/O模型 2.1 I/O模型簡介 2.2 常見的I/O模型及其特點 1.同步/異步 2.阻塞vs 非阻塞 3. 同步/異步與阻塞/非阻塞的關系 4.多路復用I/O模型 5.異步I/O模型 三.Nginx模塊 3.1 概述ng…

分布式數字身份:邁向Web3.0世界的通行證 | 北京行活動預告

數字經濟浪潮奔涌向前&#xff0c;Web3.0發展方興未艾&#xff0c;分布式數字身份&#xff08;Decentralized Identity&#xff0c;簡稱DID&#xff09;通過將分布式賬本技術與身份治理相融合&#xff0c;在Web3.0時代多方協作的分布式應用場景中發揮核心作用&#xff0c;是構建…