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.mzph.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;是构建…