>  기사  >  백엔드 개발  >  Windows10+golang+gRPC 환경 구축에 대한 자세한 설명

Windows10+golang+gRPC 환경 구축에 대한 자세한 설명

藏色散人
藏色散人앞으로
2021-03-15 17:08:173865검색

다음 튜토리얼 칼럼인 golang에서는 Windows10+golang+gRPC 환경 구축에 대해 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Windows10+golang+gRPC 환경 구축에 대한 자세한 설명

1. protoc 설치

다운로드 주소 : https://github.com/protocolbuffers/protobuf/release
(참고 : https://github.com /protocolbuffers/protobuf는 소스 코드 라이브러리이므로, 소스 코드 라이브러리를 다운로드하기에는 너무 느린 경우 Code Cloud에서 검색할 수 있습니다. 동기화된 라이브러리는 국내 소스이므로 다운로드 속도가 비교적 빠릅니다. 물론 코드 클라우드에서 직접 생성할 수도 있습니다.)

최신 버전은 3.12.2
저는 Windows10 64비트 운영 체제를 사용하고 있으므로 protoc-3.12.2-win64.zip 버전을 선택합니다.
브라우저로 직접 다운로드할 수 있습니다
네트워크 속도가 좋지 않으면 Thunder로 다운로드할 수도 있습니다: https://github.com/protocolbuffers/protobuf/releases/download/v3.12.2/protoc-3.12. 2-win64.zip
압축 해제 후 protoc.exe를 $GOPATH/bin 디렉터리에 복사합니다. 다음
GOPATH가 여러 개인 경우 타사 공용 라이브러리가 있는 GOPATH에 배치하여 여러 프로젝트에서 사용할 수 있도록 합니다.

2. gRPC 설치

gRPC 소스코드: https://github.com/grpc/grpc -go.git
공식 홈페이지에서 제공하는 설치 방법은 go get -u google.golang.org/grpc
그런데 중국에서는 다음과 같은 오류가 자주 발생합니다.

$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

google.golang.org는 중국에서는 접속이 어렵기 때문에 다운로드가 실패하게 됩니다.
공식 웹사이트에서도 다양한 솔루션을 제공합니다:
https://github.com/grpc/grpc-go
두 번째 방법을 사용하여 소스 코드를 로컬에서 직접 복제합니다
$GOPATH/src 디렉토리에 들어가서 다음 명령을 실행합니다:

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

다운로드 속도가 빠르기도 하고 느릴 때도 있습니다. 매우 느릴 때는 취소하고 몇 번 더 시도하면 속도가 빨라지는 경우도 있습니다.
다운로드가 완료된 후 gRPC를 설치하세요:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install google.golang.org/grpc/
google.golang.org\grpc\credentials\credentials.go:31:2: cannot find package "github.com/golang/protobuf/proto" in any of:
        D:\Go\src\github.com\golang\protobuf\proto (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\proto (from $GOPATH)
google.golang.org\grpc\internal\binarylog\method_logger.go:28:2: cannot find package "github.com/golang/protobuf/ptypes" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes (from $GOPATH)
google.golang.org\grpc\binarylog\grpc_binarylog_v1\binarylog.pb.go:9:2: cannot find package "github.com/golang/protobuf/ptypes/duration" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes\duration (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes\duration (from $GOPATH)
google.golang.org\grpc\binarylog\grpc_binarylog_v1\binarylog.pb.go:10:2: cannot find package "github.com/golang/protobuf/ptypes/timestamp" in any of:
        D:\Go\src\github.com\golang\protobuf\ptypes\timestamp (from $GOROOT)
        C:\Users\ASUS\go\src\github.com\golang\protobuf\ptypes\timestamp (from $GOPATH)
google.golang.org\grpc\internal\transport\controlbuf.go:28:2: cannot find package "golang.org/x/net/http2" in any of:
        D:\Go\src\golang.org\x\net\http2 (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\http2 (from $GOPATH)
google.golang.org\grpc\internal\transport\controlbuf.go:29:2: cannot find package "golang.org/x/net/http2/hpack" in any of:
        D:\Go\src\golang.org\x\net\http2\hpack (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\http2\hpack (from $GOPATH)
google.golang.org\grpc\server.go:36:2: cannot find package "golang.org/x/net/trace" in any of:
        D:\Go\src\golang.org\x\net\trace (from $GOROOT)
        C:\Users\ASUS\go\src\golang.org\x\net\trace (from $GOPATH)
google.golang.org\grpc\status\status.go:34:2: cannot find package "google.golang.org/genproto/googleapis/rpc/status" in any of:
        D:\Go\src\google.golang.org\genproto\googleapis\rpc\status (from $GOROOT)
        C:\Users\ASUS\go\src\google.golang.org\genproto\googleapis\rpc\status (from $GOPATH)

프롬프트에 따르면 패키지 부족으로 인한 오류임을 알 수 있습니다. 여기서는 오류 메시지를 분석하지 않습니다. 필요한 종속성 패키지와 다운로드 방법을 조금씩 제공합니다($GOPATH/src 디렉터리에서 명령 실행):
1) 텍스트 패키지

git clone https://github.com/golang/text.git ./golang.org/x/text

2) net 패키지

git clone https://github.com/golang/net.git ./golang.org/x/net

3) genproto 패키지

git clone https://github.com/google/go-genproto.git ./google.golang.org/genproto

4) protobuf 패키지
둘 다:

git clone https://github.com/protocolbuffers/protobuf-go.git ./google.golang.org/protobuf
git clone https://github.com/golang/protobuf.git ./github.com/golang/protobuf

둘 다 다운로드, github .com/golang/protobuf의 일부 코드는 google.golang.org/protobuf

위의 종속 라이브러리를 모두 다운로드한 후 gRPC를 다시 설치하세요.

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install google.golang.org/grpc/

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$

오류도 없고 출력도 없는 것을 확인할 수 있습니다. . .

gRPC가 괜찮은지 확인
두 개의 bash 창을 열고 각각 다음 명령을 실행합니다.

go run google.golang.org/grpc/examples/helloworld/greeter_server/main.go
go run google.golang.org/grpc/examples/helloworld/greeter_client/main.go

Windows10+golang+gRPC 환경 구축에 대한 자세한 설명

그림과 같이 클라이언트가 보낸 메시지를 서버가 수신한 것을 확인할 수 있습니다

3. rpc

작성된 proto 파일을 .go 파일로 컴파일해야 합니다. 예:
$GOPATHgoogle.golang.orggrpcexampleshelloworldhelloworld 디렉토리에 다음 파일이 있습니다.

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ ll
total 16
-rw-r--r-- 1 ASUS 197121 4938 6月   1 21:46 helloworld.pb.go
-rw-r--r-- 1 ASUS 197121 1208 6月   1 21:46 helloworld.proto
-rw-r--r-- 1 ASUS 197121 2823 6月   1 21:46 helloworld_grpc.pb.go

먼저 .go 파일을 백업합시다

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ mv helloworld.pb.go helloworld.pb.go.bak

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ mv helloworld_grpc.pb.go helloworld_grpc.pb.go.bak

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ ll
total 16
-rw-r--r-- 1 ASUS 197121 4938 6月   1 21:46 helloworld.pb.go.bak
-rw-r--r-- 1 ASUS 197121 1208 6月   1 21:46 helloworld.proto
-rw-r--r-- 1 ASUS 197121 2823 6月   1 21:46 helloworld_grpc.pb.go.bak

그런 다음 실행:

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go_out=plugins=grpc:. helloworld.proto
'protoc-gen-go' ????????????????????????е????
?????????????
--go_out: protoc-gen-go: Plugin failed with status code 1.

오류가 있는 것을 발견했습니다. protoc-gen-go를 설치해야 합니다
다음 명령을 실행하여 설치합니다.

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ go install github.com/golang/protobuf/protoc-gen-go/

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src
$ cd ../bin

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/bin
$ ll
total 11852
-rwxr-xr-x 1 ASUS 197121 3702272 5月  27 07:06 protoc.exe*
-rwxr-xr-x 1 ASUS 197121 8431104 6月   1 23:13 protoc-gen-go.exe*

설치가 완료되면 protoc-gen-go.exe 파일 $GOPATH/bin 디렉토리에 생성됩니다
그런 다음 컴파일 proto 파일을 실행합니다:
helloworld.pb.go 파일이 생성됩니다

요약

이해해야 할 여러 라이브러리가 있습니다:

1. ://github.com/protocolbuffers/protobuf
이 라이브러리에는 Google의 오픈 소스 protobuf 소스 코드 라이브러리입니다. 일반적으로 사용되는 다양한 언어로 protobuf를 구현하기 위한 소스 코드가 포함되어 있습니다. ​

2. com/golang/protobuf
이 라이브러리는 golang의 protobuf 오픈 소스 라이브러리입니다. 이 라이브러리의 README.md를 확인하면 이 라이브러리가 google.golang.org/protobuf라는 것을 알 수 있습니다. 대신 이 링크를 클릭하면 다음에 해당하는 소스 코드 git 저장소를 찾을 수 있습니다. 이 라이브러리는
https://github.com/protocolbuffers/protobuf-go

문제:

현재 오픈 소스 커뮤니티를 살펴보면 github의 protobuf는 점차적으로 google.golang.org 라이브러리가 될 것이지만 현재 플러그- 여전히 github의 protoc-gen-go를 사용해야 합니다.
google.golang.org/protobuf/cmd/protoc-gen-go를 사용하는 경우(예: google.golang.org/protobuf/cmd/protoc-gen-go를 설치하세요. , 이는 $GOPATH/bin 디렉토리에 protoc-gen-go.exe도 생성하므로 다음 오류가 발생합니다

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go_out=plugins=grpc:. helloworld.proto
--go_out: protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC

ASUS@LAPTOP-V7SMQSCI MINGW64 ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld (master)
$ protoc --go-grpc_out=. helloworld.proto
'protoc-gen-go-grpc' ????????????????????????е????
?????????????
--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.

grpc 인터페이스를 생성하기 위해 별도의 protoc-gen-go-grpc가 있지만 이는 아직 코드 검토 단계에 있으며 출시될 예정입니다. . .

위 내용은 Windows10+golang+gRPC 환경 구축에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제