목차
✅ 1. GO 모듈을 초기화하십시오
✅ 2. GQLGEN을 설치하십시오
✅ 3. 기본 스키마 생성 ( schema.graphqls )
✅ 4. 모델과 해결책을 생성합니다
✅ 5. Resolvers를 구현하십시오
예 : Todos를위한 Resolver
돌연변이 : CreateTodo
✅ 6. HTTP 서버를 설정하십시오
✅ 7. 서버를 실행하십시오
? 실제 사용을위한 팁
? 왜 gqlgen인가?
백엔드 개발 Golang GO에서 그래프 QL 서버 구축

GO에서 그래프 QL 서버 구축

Jul 28, 2025 am 02:10 AM
go graphql

GO MOD Init, 2. GQLGEN CLI 설치, 3. Schema에서 스키마를 정의합니다. Schema.graphQLS, 4. GQLGEN Init, 모델 및 Resolvers를 생성하기 위해 스키마를 정의하십시오. http : // localhost : 8080, 여기서 gqlgen은 이동 중에 유형-안전, 스키마 우선 및 생산 준비 그래프 QL 서버를 제공합니다.

GO에서 그래프 QL 서버 구축

GO에서 그래프 QL 서버를 구축하는 것은 graphql-gogqlgen 과 같은 라이브러리 덕분에 점점 인기를 얻었습니다. 둘 다 스키마를 정의하고 쿼리를 해결할 수 있지만 GQLGEN은 특히 생산 애플리케이션을위한보다 현대적이고 유형-안전하고 개발자 친화적 인 선택입니다 .

GO에서 그래프 QL 서버 구축

다음은 Boilerplate 최소화와 최대 선명도를 사용하여 GQLGEN을 사용하여 GO에서 기본 GraphQL Server를 설정하는 방법입니다.


✅ 1. GO 모듈을 초기화하십시오

새 프로젝트 디렉토리를 만들고 GO 모듈 초기화로 시작하십시오.

GO에서 그래프 QL 서버 구축
 mkdir GraphQL-Go-Server
CD GraphQL-Go-Server
mod init github.com/yourusername/graphql-go-server로 이동하십시오

✅ 2. GQLGEN을 설치하십시오

 github.com/99designs/gqlgen@latest를 설치하십시오

gqlgen CLI가 PATH 에 있는지 확인하십시오.


✅ 3. 기본 스키마 생성 ( schema.graphqls )

프로젝트 루트에서 schema.graphqls 라는 파일을 만듭니다.

GO에서 그래프 QL 서버 구축
 todo {
  ID : ID!
  제목 : 문자열!
  완료 : 부울!
  사용자 : 사용자!
}

유형 사용자 {
  ID : ID!
  이름 : 문자열!
}

유형 쿼리 {
  TODOS : [TODO!]!
}

입력 NewTodo {
  제목 : 문자열!
  userid : 문자열!
}

유형 돌연변이 {
  CreateTodo (입력 : Newtodo!) : Todo!
}

이것은 정의합니다 :

  • 두 가지 유형 : TodoUser
  • Todos를 가져 오는 쿼리
  • 새로운 할로대를 만들기위한 돌연변이

✅ 4. 모델과 해결책을 생성합니다

GQLGEN을 실행하여 초기 코드를 생성하십시오.

 gqlgen init

이것은 :

  • 생성 된 generated.go (자동 생성 된 Resolvers)
  • 스터브로 graph/schema.resolvers.go 를 만듭니다
  • server.go 에서 기본 서버를 설정하십시오

이제 필요한 경우 생성 된 모델을 사용자 정의 할 수 있습니다. 또는 GQLGEN이 gqlgen.yml 편집하여 스키마에서 생성하도록합니다.

 모델 :
  TODO :
    전지:
      ID:
        Resolver : False
      제목:
        Resolver : False
      완료:
        Resolver : False
      사용자:
        RESOLVER : TRUE # 이에 대한 리졸버를 작성하겠습니다

그런 다음 모델 만 재생합니다.

 gqlgen이 생성합니다

✅ 5. Resolvers를 구현하십시오

graph/resolver.gograph/schema.resolvers.go 편집.

예 : Todos를위한 Resolver

graph/schema.resolvers.go 에서 :

 func (r *QueryResolver) todos (ctx context.context) ([] *model.todo, error) {
  return []*model.todo {
    {
      ID : "1",
      제목 : "Learn Go",
      완료 : 거짓,
      사용자 : & model.user {id : "1", 이름 : "Alice"},
    },
  }, nil
}

돌연변이 : CreateTodo

 func (r *mutationResolver) CreateTodo (ctx context.context, input model.newtodo) ( *model.todo, error) {
  todo : = & model.todo {
    ID : "2", // 실제 앱에서 UUID 또는 DB 자동 인증 사용
    제목 : input.title,
    완료 : 거짓,
    사용자 : & model.user {id : input.userid, 이름 : "알 수없는"},
  }
  Todo, Nil
}

또한 Resolver Struct가 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. 서버를 실행하십시오

 Server.go를 실행하십시오

http://localhost:8080 으로 브라우저를 열면 GraphQL Playground가 표시됩니다.

쿼리 시도 :

 쿼리 {
  토 도스 {
    ID
    제목
    완료
    사용자 {
      이름
    }
  }
}

또는 돌연변이 :

 돌연변이 {
  CreateTodo (입력 : {제목 : "구매 우유", userId : "2"}) {
    ID
    제목
    완료
    사용자 {
      이름
    }
  }
}

? 실제 사용을위한 팁

  • 데이터베이스 사용 : pg , gorm 또는 ent 통해 PostgreSQL, MongoDB 등과 통합하십시오.
  • 컨텍스트 추가 : Auth, Logging 또는 Tracing에 context.Context 사용하십시오.
  • 오류 처리 : 필요할 때 적절한 gqlerror.Errorf 반환합니다.
  • 유효성 검사 : 레코드를 작성하기 전에 입력을 검증합니다.
  • 스키마 스티치 또는 연합 : 더 큰 앱의 경우 서비스 모듈화 서비스를 고려하십시오.

? 왜 gqlgen인가?

  • Schema-First : 먼저 API 계약을 작성하십시오.
  • 유형 안전 : GO 스트러크는 스키마에서 생성됩니다.
  • 최소 보일러 플레이트 : 필요한 경우에만 글을 쓰십시오.
  • 적극적으로 유지 관리 : 많은 팀의 생산에 사용됩니다.

기본적으로 gqlgen 사용하면 확장되는 깨끗하고 유지 관리 가능한 그래프 QL 서버가 잘 확정됩니다. 그것은 마술이 아니지만 명확성과 통제를 소중히 여기는 GO 개발자에게 올바른 트레이드 오프를 만듭니다.

위 내용은 GO에서 그래프 QL 서버 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

GO 애플리케이션의 표준 프로젝트 레이아웃은 무엇입니까? GO 애플리케이션의 표준 프로젝트 레이아웃은 무엇입니까? Aug 02, 2025 pm 02:31 PM

답은 : GO 애플리케이션에는 필수 프로젝트 레이아웃이 없지만 커뮤니티는 일반적으로 유지 보수 및 확장 성을 향상시키기 위해 표준 구조를 채택합니다. 1.CMD/저장 프로그램 입구, 각 하위 디렉토리는 CMD/MyApp/Main.go와 같은 실행 파일에 해당합니다. 2. 내부/ 저장 개인 코드, 외부 모듈로 가져올 수 없으며 비즈니스 로직 및 서비스를 캡슐화하는 데 사용됩니다. 3. PKG/ 상점은 다른 프로젝트를 수입하기위한 공개 재사용 가능한 라이브러리; 4.api/ 선택적으로 OpenApi, protobuf 및 기타 API 정의 파일을 저장합니다. 5. Config/, Scripts/및 Web/Store 구성 파일, 스크립트 및 웹 리소스 각각; 6. 루트 디렉토리에는 go.mod and go.sum이 포함되어 있습니다

Go에서 라인별로 파일을 어떻게 읽습니까? Go에서 라인별로 파일을 어떻게 읽습니까? Aug 02, 2025 am 05:17 AM

bufio.scanner를 사용하는 것은 파일을 라인별로 읽는 가장 일반적이고 효율적인 방법이며, 큰 파일, 로그 구문 분석 또는 구성 파일과 같은 시나리오를 처리하는 데 적합합니다. 1. OS.Open을 사용하여 파일을 열고 DeFerfile.close ()를 통해 파일을 닫으십시오. 2. bufio.newscanner를 통해 스캐너 인스턴스를 만듭니다. 3. For Loop의 Scanner.scan ()을 FORLE의 끝에 도달하거나 오류가 발생 함을 나타내도록 False가 반환 될 때까지 라인별로 라인별로 읽습니다. 4. Scanner.text ()를 사용하여 현재 라인 내용을 얻으십시오 (라인 브레이크 제외). 5. 루프가 끝난 후 스캐너를 확인하십시오. 이 방법에는 메모리 효과가 있습니다

GO에서 If-Else와 같은 조건부 진술을 어떻게 사용합니까? GO에서 If-Else와 같은 조건부 진술을 어떻게 사용합니까? Aug 02, 2025 pm 03:16 PM

GO의 IF-ELSE 문에는 괄호가 필요하지 않지만 곱슬 버팀대를 사용해야합니다. 그것은 범위를 제한하는 if에서 초기화 변수를 지원합니다. 조건은 Elseif 체인을 통해 판단 될 수 있으며, 종종 오류 검사에 사용됩니다. 변수 선언과 조건의 조합은 코드의 단순성과 보안을 향상시킬 수 있습니다.

Go Run Command는 무엇을합니까? Go Run Command는 무엇을합니까? Aug 03, 2025 am 03:49 AM

Gorun은 GO 프로그램을 신속하게 컴파일하고 실행하기위한 명령입니다. 1. 컴파일을 완료하고 한 단계로 실행하고, 임시 실행 파일을 생성하고 프로그램이 완료된 후 삭제합니다. 2. 주요 기능을 포함하는 독립적 인 프로그램에 적합하며, 이는 개발 및 테스트가 쉬운 주요 기능; 3. 멀티 파일 작동을 지원하며 Gorun*.go를 통해 실행할 수 있습니다. 4. 종속성을 자동으로 처리하고 모듈 시스템을 사용하여 외부 패키지를 구문 분석합니다. 5. 라이브러리 나 패키지에는 적합하지 않으며 지속적인 이진 파일을 생성하지 않습니다. 따라서 스크립트, 학습 및 빈번한 수정 중에 빠른 테스트에 적합합니다. 효율적이고 간결한 달리기 방법입니다.

GO에서 상수를 어떻게 선언합니까? GO에서 상수를 어떻게 선언합니까? Aug 02, 2025 pm 04:21 PM

GO에서는 Const 키워드를 사용하여 상수가 선언되며 값은 변경 될 수 없으며 유형이나 유형이 없을 수 있습니다. 1. constpi = 3.14159와 같은 단일 상수 선언; 2. 블록의 다중 상수 선언은 const (pi = 3.14159; 언어 = "go"; iscool = true); 3. constsecondsinminuteint = 60과 같은 명시 적 유형 상수; 4. IOTA를 사용하여 const (일요일 = iota; 월요일; 화요일)와 같은 열거 값을 생성하면 값 0, 1 및 2가 순서대로 할당되며 IoTa는 비트 작업과 같은 표현식에 사용될 수 있습니다. 상수는 컴파일 시간에 값을 결정해야합니다.

GO에서 명령 줄 플래그를 어떻게 구문 분석합니까? GO에서 명령 줄 플래그를 어떻게 구문 분석합니까? Aug 02, 2025 pm 04:24 PM

Go의 플래그 패키지는 명령 줄 매개 변수를 쉽게 구문 분석 할 수 있습니다. 1. 플래그를 사용하여 문자열, 정수 및 부울과 같은 유형 플래그를 정의합니다. 2. PONINT가 작동하지 않도록 플래그를 통해 변수로 플래그를 구문 분석 할 수 있습니다. 3. flag.parse ()를 호출 한 후 flag.args ()를 사용하여 후속 위치 매개 변수를 얻습니다. 4. 플래그 구현 값 인터페이스는 가장 간단한 CLI 요구 사항을 충족하기 위해 사용자 정의 유형을 지원할 수 있습니다. 복잡한 시나리오는 SPF13/COBRA 라이브러리로 대체 할 수 있습니다.

GO 웹 응용 프로그램에서 라우팅을 어떻게 처리합니까? GO 웹 응용 프로그램에서 라우팅을 어떻게 처리합니까? Aug 02, 2025 am 06:49 AM

GO 응용 프로그램의 라우팅은 프로젝트 복잡성에 따라 다릅니다. 1. 표준 라이브러리 net/httpservemux는 외부 의존성이없는 간단한 응용 프로그램에 적합하며 가벼우 며 URL 매개 변수 및 고급 매칭을 지원하지 않습니다. 2. CHI와 같은 타사 라우터는 미들웨어, 경로 매개 변수 및 중첩 라우팅을 제공하며, 이는 모듈 식 설계에 적합합니다. 3. Gin은 탁월한 성능, 내장 JSON 처리 및 풍부한 기능을 가지고 있으며,이 기능은 API 및 마이크로 서비스에 적합합니다. 유연성, 성능 또는 기능 통합이 필요한지 여부에 따라 선택해야합니다. 소규모 프로젝트는 표준 라이브러리, 중간 및 대형 프로젝트를 사용하여 Chi 또는 Gin을 권장하며 간단한 곳에서 복잡하게 원활한 확장을 달성합니다.

GO에서 SQL 데이터베이스에 연결하는 방법은 무엇입니까? GO에서 SQL 데이터베이스에 연결하는 방법은 무엇입니까? Aug 03, 2025 am 09:31 AM

GO에서 SQL 데이터베이스에 연결하려면 데이터베이스/SQL 패키지와 특정 데이터베이스 드라이버를 사용해야합니다. 1. 데이터베이스/SQL 패키지 및 드라이버 가져 오기 (예 : github.com/go-sql-driver/mysql)는 드라이버가 초기화에만 사용된다는 것을 나타 내기 전에 강조합니다. 2. SQL.Open ( "MySQL", "사용자 : Password@TCP (LocalHost : 3306)/dbname")를 사용하여 데이터베이스 핸들을 작성하고 DB.ping ()을 호출하여 연결을 확인합니다. 3. db.query ()를 사용하여 쿼리를 실행하고 db.exec ()를 실행하려면

See all articles