欢迎光临
我们一直在努力

Go集成GraphQL

# 使用go mod管理依赖
go mod init 项目名称

# 获取gqlgen依赖
go get github.com/99designs/gqlgen

我创建了一个 main 方法demo2-main.go

package main

import "github.com/99designs/gqlgen/cmd"

/*
go run demo2-main.go init
 */
func main() {
    cmd.Execute()
}

然后直接在此 main 方法的目录下执行:

go run demo2-main.go init

之后就会生成这些文件:

自动草稿

文件说明:

├── go.mod
├── go.sum
├── gqlgen.yml               - The gqlgen config file, knobs for controlling the generated code.
├── graph
│   ├── generated            - A package that only contains the generated runtime
│   │   └── generated.go
│   ├── model                - A package for all your graph models, generated or otherwise
│   │   └── models_gen.go
│   ├── resolver.go          - The root graph resolver type. This file wont get regenerated
│   ├── schema.graphqls      - Some schema. You can split the schema into as many graphql files as you like
│   └── schema.resolvers.go  - the resolver implementation for schema.graphql
└── server.go                - The entry point to your app. Customize it however you see fit

上面那些是 init 之后自动生成的,所以需要创建我自己的。

自动草稿

# pojo
type Student {
  id: ID!
  name: String!
  sex: String
  age: Int
  birthDate: String
  provinceCity: String
}

input NewStudent {
  id: ID!
  name: String!
  sex: String
  age: Int
  birthDate: String
  provinceCity: String
}

# 插入
type Mutation {
  createStudent(input: NewStudent!): Student!
}

# 查询
type Query {
  students: [Student!]!
}

自动草稿

// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.

package model

type NewStudent struct {
    ID           string  `json:"id"`
    Name         string  `json:"name"`
    Sex          *string `json:"sex"`
    Age          *int    `json:"age"`
    BirthDate    *string `json:"birthDate"`
    ProvinceCity *string `json:"provinceCity"`
}

type Student struct {
    ID           string  `json:"id"`
    Name         string  `json:"name"`
    Sex          *string `json:"sex"`
    Age          *int    `json:"age"`
    BirthDate    *string `json:"birthDate"`
    ProvinceCity *string `json:"provinceCity"`
}

自动草稿

package graph

import "study-golang/gqlgen/demo2/graph/model"

// This file will not be regenerated automatically.
//
// It serves as dependency injection for your app, add any dependencies you require here.

//type Resolver struct{}

type Resolver struct{
    students []*model.Student
}

完成这些操作之后,初始化我们自定义的 schema,执行:

go run demo2-main.go init

然后会发现 generated 文件夹下的generated.go被重新初始化为我们自定义的 schema 的类型的了,不仅如此,所有的 schema 类型都从 todo 修改为我定义的 schema 类型了。

自动草稿

为了演示,这里简便一点,只写了插入和查询的操作:

自动草稿

func (r *mutationResolver) CreateStudent(ctx context.Context, input model.NewStudent) (*model.Student, error) {
    //panic(fmt.Errorf("not implemented"))
    student := &model.Student{
        ID: input.ID,
        Name: input.Name,
        Sex: input.Sex,
        Age: input.Age,
        BirthDate: input.BirthDate,
        ProvinceCity: input.ProvinceCity,
    }
    r.students = append(r.students, student)
    return student, nil
}

func (r *queryResolver) Students(ctx context.Context) ([]*model.Student, error) {
    //panic(fmt.Errorf("not implemented"))
    return r.students, nil
}

最后启动server.go,访问:http://localhost:8080

createStudent

自动草稿

完整的:

自动草稿

逗号其实也可以不加~

# 执行插入操作
mutation createStudent {
  createStudent(input:{
    id:3,
    name:"lzhpo03",
    sex:"男",
    age:1,
    birthDate:"2019-06-16",
    provinceCity:"江西赣州"}
  )
  {
    id
    name
    sex
    age
    birthDate
    provinceCity
  }
}

我插入 3 条测试数据,然后在下面查询。

自动草稿

# 执行查询操作,需要什么字段,就写什么字段,前提是字段有的情况下
query findStudents {
  students {
    id
    name
    sex
    age
    birthDate
    provinceCity
  }
}
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Go集成GraphQL》
文章链接:https://www.xpn.cc/902/fy.html
分享到: 更多 (0)

热门推荐

评论 抢沙发

登录

忘记密码 ?