目錄
✅1。初始化您的GO模塊
✅2。安裝GQLGEN
✅3。創建基本架構( schema.graphqls
✅4。生成模型和解析器
✅5。實施解析器
示例:托多斯的解析器
突變:CreateTodo
✅6。設置HTTP服務器
✅7。運行服務器
?現實世界使用的提示
?為什麼要gqlgen?
首頁 後端開發 Golang 在GO中構建GraphQl Server

在GO中構建GraphQl Server

Jul 28, 2025 am 02:10 AM
go graphql

用GO Mod Init初始化GO模塊,2。 SthernGQLGEN CLI,3。在schema.graphqls中定義一個架構,4。運行gqlgen init以生成型號和解析器,5。用於查詢和突變的分辨率函數,6。使用Generated Schema的HTTP服務器設置HTTP服務器,以及70.運行式訪問plays in。 GQLGEN在GO中提供了類型安全,架構優先和生產的GraphQl Server。

在GO中構建GraphQl Server

借助graphql-gogqlgen等庫,在GO中構建GraphQl Server已變得越來越流行。儘管您都可以定義模式並解決查詢,但GQLGEN是更現代,類型和開發人員友好的選擇,尤其是對於生產應用程序。

在GO中構建GraphQl Server

這是使用GQLGEN在GO中設置基本的GraphQl Server的方法,並具有最小的樣板和最大的清晰度。


✅1。初始化您的GO模塊

首先創建一個新的項目目錄並初始化GO模塊:

在GO中構建GraphQl Server
 mkdir graphql-go-server
CD GraphQl-Go-Server
Go Mod Init Github.com/yourusername/graphql-go-server

✅2。安裝GQLGEN

 Go nistal install github.com/99designs/gqlgen@latest

確保gqlgen CLI在您的PATH上。


✅3。創建基本架構( schema.graphqls

在您的項目root中創建一個名為schema.graphqls的文件:

在GO中構建GraphQl Server
類型todo {
  id:id!
  標題:字符串!
  完成:布爾人!
  用戶:用戶!
}

鍵入用戶{
  id:id!
  名稱:字符串!
}

類型查詢{
  Todos:[todo! ]!
}

輸入newtodo {
  標題:字符串!
  用戶ID:字符串!
}

類型突變{
  createTodo(輸入:newtodo!):todo!
}

這定義了:

  • 兩種類型: TodoUser
  • 查詢以獲取Todos
  • 突變創建一個新的湯do

✅4。生成模型和解析器

運行GQLGEN生成初始代碼:

 gqlgen Init

這將:

  • 生成generated.go (自動生成的解析器)
  • 使用Stubs創建graph/schema.resolvers.go
  • server.go中設置基本服務器

現在,您可以在需要時自定義生成的模型。或讓GQLGEN通過編輯gqlgen.yml從模式中生成它們:

型號:
  托多:
    字段:
      ID:
        解析器:錯誤
      標題:
        解析器:錯誤
      完畢:
        解析器:錯誤
      用戶:
        解析器:是的#我們為此寫一個解析器

然後再生模型:

 GQLGEN生成

✅5。實施解析器

編輯graph/resolver.gograph/schema.resolvers.go

示例:托多斯的解析器

graph/schema.resolvers.go中:

 func(r *queryResolver)todos(ctx context.context)([] *model.todo,error){
  返回[]*model.todo {
    {
      id:“ 1”,
      標題:“學習去”,
      完成:false,
      用戶:&model.user {id:“ 1”,name:“ alice”},
    },,
  },零
}

突變:CreateTodo

 func(r *mutationResolver)createTodo(ctx context.context,input model.newtodo)( *model.todo,error){
  todo:=&model.todo {
    id:“ 2”,//在真實應用中,使用UUID或DB自動啟動
    標題:input.title,
    完成:false,
    用戶:&model.user {id:input.userid,name:“ unknown”},
  }
  返回Todo,nil
}

另外,請確保在graph/resolver.go中註冊溶要結構。


✅6。設置HTTP服務器

gqlgen init創建的server.go 。應該看起來像這樣:

包裝主

進口 (
  "紀錄"
  “ net/http”
  “ github.com/yourusername/graphql-go-server/graph”
  “ github.com/99designs/gqlgen/graphql/handler”
  “ github.com/99designs/gqlgen/graphql/playground”
)

func main(){
  srv:= handler.newdefaultserver(graph.newexecutableschema(graph.config {resolvers:&graph.resolver {}}})))

  http.handle(“/”,Playground.handler(“ GraphQl Playground”,“/QUERY”))
  http.handle(“/query”,srv)

  log.printf(“連接到http:// localhost:8080/for GraphQl Playground”)
  log.Fatal(http.listenandserve(“:8080”,nil))
}

✅7。運行服務器

GO RUN SERVER.GO

打開瀏覽器http://localhost:8080 - 您會看到GraphQl Playground。

嘗試查詢:

詢問 {
  todos {
    ID
    標題
    完畢
    用戶{
      姓名
    }
  }
}

或突變:

突變{
  createtodo(輸入:{標題:“ buy Milk”,userId:“ 2”}){
    ID
    標題
    完畢
    用戶{
      姓名
    }
  }
}

?現實世界使用的提示

  • 使用數據庫:通過pggorment與PostgreSQL,MongoDB等集成。
  • 添加上下文:使用context.Context進行身份驗證,記錄或跟踪。
  • 錯誤處理:需要在需要時返回適當的gqlerror.Errorf
  • 驗證:創建記錄之前驗證輸入。
  • 架構縫合或聯邦:對於較大的應用程序,請考慮模塊化服務。

?為什麼要gqlgen?

  • 首先:首先寫您的API合同。
  • 類型安全:GO結構是由模式生成的。
  • 最小樣板:僅在需要的地方寫解析器。
  • 積極維護:許多團隊用於生產。

基本上,使用gqlgen ,您將獲得一個清潔,可維護的GraphQl Server,可以很好地縮放。這不是魔術,而是對重視清晰度和控制的GO開發人員的正確權衡。

以上是在GO中構建GraphQl Server的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
GO應用程序的標準項目佈局是什麼? GO應用程序的標準項目佈局是什麼? Aug 02, 2025 pm 02:31 PM

答案是:Go應用沒有強制項目佈局,但社區普遍採用一種標準結構以提升可維護性和擴展性。 1.cmd/存放程序入口,每個子目錄對應一個可執行文件,如cmd/myapp/main.go;2.internal/存放私有代碼,不可被外部模塊導入,用於封裝業務邏輯和服務;3.pkg/存放可公開復用的庫,供其他項目導入;4.api/可選,存放OpenAPI、Protobuf等API定義文件;5.config/、scripts/、web/分別存放配置文件、腳本和Web資源;6.根目錄包含go.mod和go.sum

您如何在Go中逐行讀取文件? 您如何在Go中逐行讀取文件? Aug 02, 2025 am 05:17 AM

使用bufio.Scanner是Go中逐行讀取文件最常見且高效的方法,適用於處理大文件、日誌解析或配置文件等場景。 1.使用os.Open打開文件並確保通過deferfile.Close()關閉文件。 2.通過bufio.NewScanner創建掃描器實例。 3.在for循環中調用scanner.Scan()逐行讀取,直到返回false表示到達文件末尾或出錯。 4.使用scanner.Text()獲取當前行內容(不含換行符)。 5.循環結束後檢查scanner.Err()以捕獲可能的讀取錯誤。此方法內存效

您如何使用諸如if-else in go中的條件語句? 您如何使用諸如if-else in go中的條件語句? Aug 02, 2025 pm 03:16 PM

Go中的if-else語句無需括號但必須使用花括號,支持在if中初始化變量以限製作用域,可通過elseif鍊式判斷條件,常用於錯誤檢查,且變量聲明與條件結合可提升代碼簡潔性與安全性。

您如何在GO中解析命令行旗幟? 您如何在GO中解析命令行旗幟? Aug 02, 2025 pm 04:24 PM

Go的flag包可輕鬆解析命令行參數,1.使用flag.Type()定義字符串、整型、布爾等類型標誌;2.可通過flag.TypeVar()將標誌解析到變量避免指針操作;3.調用flag.Parse()後,用flag.Args()獲取後續位置參數;4.實現flag.Value接口可支持自定義類型,滿足多數簡單CLI需求,複雜場景可用spf13/cobra庫替代。

Go Run命令做什麼? Go Run命令做什麼? Aug 03, 2025 am 03:49 AM

gorun是一個用於快速編譯並執行Go程序的命令,1.它在一步中完成編譯和運行,生成臨時可執行文件並在程序結束後刪除;2.適用於包含main函數的獨立程序,便於開發和測試;3.支持多文件運行,可通過gorun*.go或列出所有文件執行;4.自動處理依賴,利用模塊系統解析外部包;5.不適用於庫或包,且不生成持久化二進製文件,因此適合腳本、學習和頻繁修改時的快速測試,是一種高效、簡潔的即時運行方式。

您如何處理GO Web應用程序中的路由? 您如何處理GO Web應用程序中的路由? Aug 02, 2025 am 06:49 AM

Go應用中的路由選擇取決於項目複雜度,1.使用標準庫net/httpServeMux適合簡單應用,無需外部依賴且輕量,但不支持URL參數和高級匹配;2.第三方路由器如Chi提供中間件、路徑參數和嵌套路由,適合模塊化設計;3.Gin性能優異,內置JSON處理和豐富功能,適合API和微服務。應根據是否需要靈活性、性能或功能集成來選擇,小型項目用標準庫,中大型項目推薦Chi或Gin,最終實現從簡單到復雜的平滑擴展。

您如何在Go中宣布常數? 您如何在Go中宣布常數? Aug 02, 2025 pm 04:21 PM

在Go中,常量使用const關鍵字聲明,且值不可更改,可為無類型或有類型;1.單個常量聲明如constPi=3.14159;2.塊內多個常量聲明如const(Pi=3.14159;Language="Go";IsCool=true);3.顯式類型常量如constSecondsInMinuteint=60;4.使用iota生成枚舉值,如const(Sunday=iota;Monday;Tuesday)將依次賦值0、1、2,且iota可用於位運算等表達式;常量必須在編譯時確定值,

如何在GO中連接到SQL數據庫? 如何在GO中連接到SQL數據庫? Aug 03, 2025 am 09:31 AM

要連接Go中的SQL數據庫,需使用database/sql包和特定數據庫驅動。 1.導入database/sql包和驅動(如github.com/go-sql-driver/mysql),注意驅動前加下劃線表示僅用於初始化;2.使用sql.Open("mysql","user:password@tcp(localhost:3306)/dbname")創建數據庫句柄,並調用db.Ping()驗證連接;3.使用db.Query()執行查詢,db.Exec()執行

See all articles