Skip to end of metadata
Go to start of metadata

由于视频录制应用问题被意外中断,因此视频只有部分内容,后续会重新录制。

Hello World

视频地址:https://www.bilibili.com/video/BV15R4y1G7hq/

包含以下内容:

  1. 安装GoFrame CLI
  2. 使用CLI创建一个Go项目
  3. 工程目录介绍

API Service Demo

视频地址:https://www.bilibili.com/video/BV1b44y1M7oL/

代码地址:https://github.com/gogf/gf-demo-user

我们以一个简单的API Service为例来介绍如何使用GoFrame框架以及相应的CLI工具来开发一个接口项目。

包含以下内容:

  1. 包名设计
  2. 接口设计
  3. 接口文档
  4. 配置管理
  5. 控制器实现
  6. 业务逻辑封装
  7. 路由注册
  8. 中间件使用
  9. Context及上下文变量

接口测试

我们通过curl命令来对其中两个接口执行简单的测试。

用户注册 - /user/signup

注册一个账号test001,昵称为john,密码为123456

curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/sign-up
{"code":0,"message":"","data":null}

我们再次使用刚才的信息注册一次试试。

curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/sign-up
{"code":50,"message":"Passport \"test001\" is already token by others","data":null}

可以看到注册失败了,相同名称只能注册一个账号。

用户登录 - /user/signin

我们先访问获取用户信息的接口,验证鉴权中间件是否生效。

curl http://127.0.0.1:8199/user/profile
Forbidden

我们用刚才注册的账号登录。

curl -i -d 'passport=test001&password=123456' http://127.0.0.1:8199/user/sign-in
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,Content-Type,Accept,User-Agent,Cookie,Authorization,X-Auth-Token,X-Requested-With
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,PATCH,HEAD,CONNECT,OPTIONS,TRACE
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3628800
Content-Type: application/json
Server: GoFrame HTTP Server
Set-Cookie: gfsessionid=14sc9nep0u6yl0cieluexn0n0w2008q7; Path=/; Expires=Wed, 09 Mar 2022 15:52:44 GMT; SameSite
Trace-Id: 4830f6adbb72da16f34b7162f93080d8
Date: Tue, 08 Mar 2022 15:52:44 GMT
Content-Length: 35

{"code":0,"message":"","data":null}

我们这里使用了-i选项用于终端打印出服务端返回的Header信息,目的是为了获取sessionidGF框架默认的sessionid名称为gfsessionid,我们看到返回的Header中已经有了,并且是通过Cookie方式返回的。

随后我们再次访问获取用户信息接口,并且这次提交gfsessionid,该信息可以通过Header也可以通过Cookie提交,服务端都是能够自动识别的。

curl -H 'gfsessionid:14sc9nep0u6yl0cieluexn0n0w2008q7' http://127.0.0.1:8199/user/profile
{"code":0,"message":"","data":{"id":1,"passport":"test001","password":"123456","nickname":"john","createAt":"2022-03-08 23:51:40","updateAt":"2022-03-08 23:51:40"}}
Content Menu

  • No labels

27 Comments

  1. 个人觉得,将业务逻辑的解耦放到定义request的结构体上会好一些,好处如下:

    1. 控制器可以将复杂的逻辑拆分成块逻辑
    2. 每个块逻辑获取req的参数不需要像服务里那样必须传进去,因为可以像PHP的类中那样可以直接内部调用
    3. 每个接口请求都因为参数、版本等因素,导致接口内部流程有所不同,所以,一个接口,一次逻辑分拆更灵活一些。
    4. 服务用来将不同接口中相似的逻辑进行封装,从而提现了服务的价值。
  2. v2这个版本相对于以前的版本变化较大,刚开始用时有些难以理解,我也是研究了两天才入了个门。官网上一个简单的DEMO用到的知识点也比较多,对于初学者来说,参考价值不大。而且里面有一些包的用法,官网上也没有相关的资料。

    1. 回头会发一期视频来介绍。

      1. 大佬,赶紧发 2.0 文档。这不是看得有点懵。而是文档是 1.x 的文档,工程是 2.0 的工程,完全对不上。做几步就下不去了。囧rz。

        1. 最新的文档 都是按照2.0来的

  3. V2.0 正式发布是否有大概的时间点?

      1. 打算用 v2.0 写毕设呢,3月份出怕是有点赶 哈哈

        1. 可以使用的,大胆使用就是啦,一般的curd也不会变更了

  4. 郭强  请教一下.请问之前做项目使用的V 1.16.6 版本 . 如果之后想upgrade .是不是在go.mod上重新指明更新版本就好了

    当然工程的结构是没办法变化了 或者需要手动调整.

    再或者是否有出cli上增加一个upgrade 目标project的功能 呢

  5. Wilson liu 先要在你工程引用的地方 把原来github.com/gogf/gf 引用地方替换成 github.com/gogf/gf/v2,然后 go mod tidy就可以升级为v2 版本了

    1. 好,刚已经试过了. 是可以了. 谢谢

  6. 新人一脸懵啊,快速开始为什么什么都没有啊

  7. win10系统  cli v2.0.3  如何安装?

    1. 可以直接下载安装包安装,其实跟linux差距不是很大。你看看视频

  8. 这快速开始,写了个寂寞

    1. 欢迎大佬来完善一波

  9. 希望大佬可以出一个升级文档,包括不同版本间框架的差异,升级可能出现的问题及解决办法

  10. 请问如何对已有的系统返回信息

    {
        "code"0,
        "message""",
        "data"null
    }

    进行补充message的信息呢.这是系统请求成功后的返回,我想设置message为"请求成功了"

    1. 自定义结构体,给你一个参考

      r.Response.WriteJson(JsonRes{
      Code: gerror.Code(err),
      Msg: err.Error(),
      Data: responseData,
      })
      r.Exit()
      结构体字段都可以自己赋值的
  11. API Service Demo使用ms-sql 步骤如下(gf2.0.6):

    1)配置字符串(注意修改manifest\config\config.yaml !!!不是hack\config.yaml)   ORM使用配置

      default:
        # link:   "mysql:root:fei7428@tcp(127.0.0.1:3306)/test"
        link:     "mssql: user id=sa;password=123456;server=127.0.0.1;port=1433;database=test;encrypt=disable"
        debug:  true


    2)配置驱动https://github.com/gogf/gf/tree/master/contrib/drivers

       修改main.go如下: 

     package main
    
    import (
        "github.com/gogf/gf-demo-user/v2/internal/cmd"
        _ "github.com/gogf/gf/contrib/drivers/mssql/v2"
        "github.com/gogf/gf/v2/os/gctx"
    )
    
    func main() {
        cmd.Main.Run(gctx.New())
    }

     3)mssql创建表语句如下:

    CREATE TABLE [users] (
      id int  identity(1,1) NOT NULL ,
      passport varchar(45) ,
      password varchar(45) ,
      nickname varchar(45),
      create_at datetime DEFAULT getdate(),
      update_at datetime DEFAULT NULL ,
      PRIMARY KEY (id)
    ) 

    注意:ms-sql要将表名user改为其他,如users,否则报关键字错误 

    4)修改internal\service\internal\dao\internal\user.go里的NewUserDao

    func NewUserDao() *UserDao {
        return &UserDao{
            group:   "default",
            table:   "users",  //原来为user
            columns: userColumns,
        }
    }
  12. 有人在打开运行这个gf-demo-user例子的时候出现过这个问题吗,好像是internal文件名的问题,但是我不知道该怎么处理

    package command-line-arguments
    main.go:4:2: use of internal package github.com/gogf/gf-demo-user/v2/internal/cmd not allowed


    引入的github.com/gogf/gf-demo-user/v2/internal/model/entity包也是带有红色的波浪线


    望各位指教,提点一下



    1. abysoul 你可以把项目中的go.mod删除了,然后再用go mod init 生成一下,再用go mod tidy执行一下。在执行这些命令前,先看看go module是否开启,如果没有开启先把这个开启。如果是用goland,在settings->Go→Go Modules中把“Enable Go Modules integration”划上对勾。如果用的是其它,不行就用命令 go env -w GO111MODULE="on"开启。

    2. 我明白你的问题所在了,你打开 go.mod 这个文件,看一下go的版本,以及gf的版本,go的版本改成你当前的go版本,如:1.18;gf的版本现在最新的是2.1.0-rc3(但是这个怎么写的都不行,我最后改成2.0.6是可以的)。这样改一下对应的版本,然后再执行 go mod tidy 命令,更新一下就应该可以了。

    3. 把项目中的go.mod删除,go mod init时,init后的项目应是网址形式,如:aaa.com , 初始化后go mod tidy执行依赖,把原来的 github.com/gogf/gf-demo-user/v2 换成 init后的网址形式的项目名称即可。

      不建议进行mod init项目

  13. 快速开始的视频啥时候有完整版啊,对Go新手不太友好啊。