goframe v2 示例代码学习笔记

示例代码

首先来看一下结构,第一次看可能会觉得有点复杂:

.
├── api
├── go.mod
├── go.sum
├── hack
├── internal
├── main
├── main.go
├── Makefile
├── manifest
├── README.MD
├── resource
└── utility

main.go

先看看主入口的文件

package main

import (
	_ "demo/internal/packed"

	"github.com/gogf/gf/v2/os/gctx"

	"demo/internal/cmd"
)

func main() {
	cmd.Main.Run(gctx.GetInitCtx())
}

是一个正常的一句话启动,但是引入了cmd模块,看来主要入口在cmd的Main变量中

cmd.go

package cmd

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
	"github.com/gogf/gf/v2/os/gcmd"

	"demo/internal/controller/hello"
)

var (
        Main = gcmd.Command{
		Name:  "main",
		Usage: "main",
		Brief: "start http server",
		Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
			s := g.Server()
			s.Group("/", func(group *ghttp.RouterGroup) {
				group.Middleware(ghttp.MiddlewareHandlerResponse)
				group.Bind(
					hello.NewV1(),
				)
			})
			s.Run()
			return nil
		},
	}
)

可以看到,主要内容是Func,其中创建了一个Server,然后调用Group方法为根添加路由,Bind加入的是hello模块中的东西,是人为写的,跟进去看看

controller/hello

.
└── hello
    ├── hello.go
    ├── hello_new.go
    └── hello_v1_hello.go

hello模块中总共三个文件,我们一个一个看

controller/hello/hello.go

这个文件是空的

controller/hello/hello_new.go

package hello

import (
	"demo/api/hello"
)

type ControllerV1 struct{}

func NewV1() hello.IHelloV1 {
	return &ControllerV1{}
}

这个文件里出现了上面cmd.go文件中调用的方法,它返回的是一个空结构体的引用,而方法定义的返回值又是另外一个东西
看来应该是一个接口,然后通过空结构体继承?我并不是特别熟悉这里的语法,实在抱歉本人go语言之学了半个月
不过可以看出这个hello.IHelloV1是很重要的东西了,但这里还有一个文件,先看看这个文件,里面应该是api的具体的逻辑

controller/hello/hello_v1_hello.go

package hello

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"

	v1 "demo/api/hello/v1"
)

func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) {
	g.RequestFromCtx(ctx).Response.Writeln("Hello World!")
	return
}

这里是方法的具体实现,为上一个名为ControllerV1的结构体定义了一个名为Hello的方法接受参数然后发送文本,大概是要实现接口吧
但req与res的类型并不是gf提供的通用类型,而是自定义的,咱们再跟进去看看

api

.
└── hello
    ├── hello.go
    └── v1
        └── hello.go

该文件夹主要用来表示接口格式,所以里面放的基本都是struct和interface

api/hello/hello.go

package hello

import (
	"context"
	
	"demo/api/hello/v1"
)

type IHelloV1 interface {
	Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error)
}

这里是NewV1()方法的返回类型,一个接口,里面包含一个方法,也就是 controller/hello/hello_v1_hello.go 中的方法,该接口的具体实现也就是ControllerV1结构体

api/hello/v1/hello.go

package v1

import (
	"github.com/gogf/gf/v2/frame/g"
)

type HelloReq struct {
	g.Meta `path:"/hello" tags:"Hello" method:"get" summary:"You first hello api"`
}
type HelloRes struct {
	g.Meta `mime:"text/html" example:"string"`
}

这里是最主要的地方,定义了请求的路径,参数类型等,甚至还有接口分类和概述,大概是为了接口文档而准备

总结

至此已经捋顺了一变示例代码的主要逻辑

  1. 在cmd.go中创建server和配置路由( 配置路由这一步我觉得可以与cmd.go分开来做 )
  2. 在api文件夹中创建接口和request&response的路径和参数等
  3. 在controller文件夹中实现api文件夹中定义的接口中方法的具体实现并返回给路由

当然,其中还有许多其他的内容,并且本文并没有讲到这些东西的内部具体是怎么实现的,我估计我暂时也不会
例如:

  • 为什么NewV1方法仅用返回一个空的结构体即可
  • 为什么在实现Hello方法的时候只要在参数中加入了定义过path的结构体HelloReq就代表注册了呢?并且创建一个新方法再加入这个参数就会报错起冲突

本人学go语言的时间并不算久,很多内容还不是很熟悉,仅停留在理论阶段,实战技能很少,请谅解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《SystemVerilog路科验证v2学习笔记》是一本非常全面深入的书籍,对于学习SystemVerilog语言及验证方法学习者是非常有帮助的。 本书详细介绍了SystemVerilog语言的基础知识和高级特性,包括数据类型、运算符、流控制语句、函数、任务、类、接口等内容,同时紧密结合实际应用场景,给出了大量的示例和案例,让读者能够深入理解语言的特性和应用。 在验证方法方面,本书介绍了常用的验证方法,包括自动化验证、端到端验证、仿真验证和硬件验证方法等。并且配合测试实践,详细介绍常用的验证步骤,例如验证计划、验证环境设计、测试用例生成、仿真调试等。 除此之外,本书还介绍了SystemVerilog中非常重要的Constrained Random Verification方法,包括约束对象、约束条件等内容的详细介绍。并且还介绍了常用的SystemVerilog验证库,例如UVM等内容。 本书内容丰富、实用性强,对于想要了解SystemVerilog语言和验证方法的读者来说,是一本非常不错的参考资料。但读者在阅读本书的时候,需要具备一定的硬件系统知识和编程基础,这样能够更好的理解及学习本书的知识内容。 ### 回答2: 路科验证v2学习笔记是一本全面介绍SystemVerilog验证语言的畅销书籍,共计600页。本书由作者路科阅读SystemVerilog语言规范,并将其实践经验结合编写而成。书中内容包含SystemVerilog语言的基础、高级语法、重要特性以及实际应用等方面,特别适合初学者和有一定基础的验证工程师阅读。 在基础部分,作者详细介绍了SystemVerilog语言的数据类型、操作符、数据结构及宏定义等内容,还介绍了模块的声明、端口、实例化及连接等基本使用方法。在高级语法部分,作者介绍了SystemVerilog中常用的语法,如过程、任务、函数、静态存储类、重载及继承等。另外,作者还介绍了异步时序控制器、顺序时序控制器、交互验证及UVM使用方法等内容。在实际应用方面,作者给出了一系列SystemVerilog验证实例,涉及到寄存器验证、串口验证、DMA验证、AXI验证等多个领域。 总之,如果您是SystemVerilog的初学者或想进一步学习这门语言,这本书可以作为一本好的学习笔记。 ### 回答3: SystemVerilog是一种硬件描述语言,主要用于硬件验证和设计。而路科验证v2学习笔记就是一本详尽的SystemVerilog学习资料,全书共600页,内容涵盖了从SystemVerilog基础语法到高级验证技术的全面介绍。 该书以工程实例为主线,结合实际项目经验,详细讲解了SystemVerilog语言的各个方面,包括数据类型、运算符、流程控制语句、函数、任务、类、接口、时序建模、仿真调试等。同时,本书还特别强调了SystemVerilog中重要的验证特性,如断言、覆盖率、约束随机等。 此外,路科验证v2学习笔记还提供了大量的实战练习,通过实践加深读者对SystemVerilog的理解和应用能力。同时,作者还介绍了常用的EDA工具、仿真平台和验证方法,帮助读者快速掌握实际应用技能。 总之,路科验证v2学习笔记是一本完整、系统、实用的SystemVerilog学习资料,适合各类硬件设计和验证工程师、从业人员、硬件爱好者及学生使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值