"/> ">

Maison >développement back-end >Golang >go grpc : impossible d'importer github.com/golang/protobuf/proto (aucun module requis ne fournit le package 'github.com/golang/protobuf/proto')

go grpc : impossible d'importer github.com/golang/protobuf/proto (aucun module requis ne fournit le package 'github.com/golang/protobuf/proto')

王林
王林avant
2024-02-09 09:00:111214parcourir

go grpc:无法导入github.com/golang/protobuf/proto(没有必需的模块提供包“github.com/golang/protobuf/proto”)

L'éditeur PHP Zimo a rencontré une erreur lors de l'utilisation de go grpc, indiquant que le module "github.com/golang/protobuf/proto" n'a pas pu être importé. Cette erreur est généralement causée par des modules requis manquants. Avant d'utiliser go grpc, nous devons nous assurer que la bibliothèque protobuf a été correctement installée et que les packages proto pertinents ont été correctement importés dans le code. Ensuite, je présenterai en détail comment résoudre ce problème.

Contenu de la question

Lorsque "protoc --proto_path=proto proto/*.proto --go_out=plugins", le fichier proto importe "github.com/golang/protobuf/proto" au lieu de "google.golang.org " /protobuf/proto” =grpc:pb” commande

Importer des fichiers

import (
    fmt "fmt"
    proto "github.com/golang/protobuf/proto"
    math "math"
)
...
> This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

Mon fichier prototype

syntax="proto3";

message Processor{

    string name=1;
    uint32 cores=2;
    uint32 min_ghz=3;
    uint32 max_ghz=4; 
}

~go/bin/protoc-gen-go-grpc a une version

go: downloading google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0
go: downloading google.golang.org/grpc v1.58.2
go: downloading google.golang.org/protobuf v1.28.1

Qu'est-ce que j'ai fait

Installation initiale

$ allez installer google.golang.org/protobuf/cmd/[email protected]

$ allez installer google.golang.org/grpc/cmd/[email protected]

Tapez go clean -modcache avant d'installer de nouveaux packages et réinstallez la dernière version en utilisant le commentaire @latest

version go : version go1.21.1 linux/amd64

sur Ubuntu 20.4

Protocole--Version libprotoc 3.6.1

Installation du compilateur protobuf et golang-goprotobuf à l'aide d'apt

sudo apt install protobuf-compiler
sudo apt install golang-goprotobuf -dev
export PATH="$PATH:$(go env GOPATH)/bin"

Je pense que le problème est là mais je ne sais pas quoi résoudre ni comment lire ceci

go mod graph | grep github.com/golang/protobuf

example-first github.com/golang/[email protected]
github.com/golang/[email protected] github.com/google/[email protected]
github.com/golang/[email protected] google.golang.org/[email protected]
google.golang.org/[email protected] github.com/golang/[email protected]
google.golang.org/[email protected] github.com/golang/[email protected]
github.com/golang/[email protected] github.com/google/[email protected]
github.com/golang/[email protected] google.golang.org/[email protected]


go mod why github.com/golang/protobuf

go: downloading github.com/golang/protobuf v1.5.3
go: downloading github.com/google/go-cmp v0.5.5
go: downloading golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
# github.com/golang/protobuf
(main module does not need package github.com/golang/protobuf)

EDIT : je pense que je l'ai installé à l'origine en utilisant go get -u github.com/golang/protobuf/proto mais j'ai supprimé le binaire en utilisant rm -rf $(go env GOPATH)/pkg/mod/github.com/golang file/ protobuf/proto et installez la nouvelle version en utilisant go install google.golang.org/protobuf/cmd/protoc-gen-go@latest et allez installer google.golang.org/grpc/cmd/protoc-gen-go-grpc@ Newest . Il génère toujours des fichiers go en utilisant les anciennes importations

Edit2 : protoc-gen-go --version introuvable, mais protoc-gen-go-grpc --version est 1.2.0. protoc --La version est libprotoc 3.6.1 où est le protocole-gen-go protoc-gen-go:/usr/bin/protoc-gen-go /home/hp/go/bin/protoc-gen-go /usr/share/man/man1/protoc-gen-go.1.gz p>

La solution

est la suivante https://www.php.cn/link/a5481cd6d7517aa3fc6476dc7d9019ab Auteur : @puellanivis

Dans un environnement Linux $PATH 变量应以 /home/{username}/go/bin 开头,然后按顺序以 /usr/bin 开头。这是因为我们需要在 /usr/bin/protoc-gen-go 之前找到 google.golang.org/gprc/cmd/protoc-gen-go-grpc@latest.

Edit ~/.bashrc~/.bash_profile 文件 ($vim ~/.bashrc) et exportez manuellement l'intégralité de l'environnement du chemin. Dans mon cas, je dois ajouter

export PATH=/home/hp/go/bin:/usr/local/go:/home/hp/go:usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer