首页 > 其他分享 >go krotos proto编译引用外部包 was not found or had errors

go krotos proto编译引用外部包 was not found or had errors

时间:2023-05-02 23:12:37浏览次数:48  
标签:GOPATH errors src proto had protoc import 路径

前言

kratos protos 生成 pb.go 文件时,会出现引用其他 proto 文件报错 was not found or had errors,因找不到此文件而无法编译。

解决

首先我们先了解下 protoc 中 import 的两条规则:

  1. import 不允许使用相对路径;
  2. import 导入路径应该从根开始的绝对路径

这个根开始的绝对路径指的是 $GOPATH/src 开始的路径。

把对应缺失的文件下载下来,放在 $GOPATH/src 下,例如 import "google/api/annotations.proto"; 找不到

点击googleapis下载项目,移动到$GOPATH/src 下,此时完整路径应该就是:

$GOPATH/src/google/api/annotations.proto

注意:使用 krotos项目,缺失的 proto 文件,需用户自行编写或下载,存放在 krotos 项目的 third_party 目录(框架定义的第三方 proto 存放路径)

protoc 路径问题

protoc 有一个参数 -I,表示引入文件的目录路径,如果没有指定 -I 参数,则在当前目录进行搜索。

例如这里的 import "google/api/annotations.proto";,这里的这个路径,其实是从 $GOPATH/src 开始的路径。

也就是说,首先要用 -I 参数将引入包的路径设置到 $GOPATH/src 目录下,即

protoc -I ../

完整命令:

protoc -I ../ -I ./ --go_out=plugins=grpc:. ./test.proto

每个 -I 参数都引入一个目录,再加上待编译的 proto 也需要引入,所以上面这里就用了两个 -I 来引入目录文件。

推荐使用 $GOPATH/src 的方式来引入,简单直观不容易出错:

protoc -I ./ \
	-I $GOPATH/src \
	-I $GOPATH/src/google/api \
	--go_out=plugins=grpc:. ./xxx.proto

import自定义proto的红色提示

goland进行以下操作:
File 》 Settings 》Languages & Frameworks 》 Protobuf,添加 proto 文件目录,Apply 》OK

标签:GOPATH,errors,src,proto,had,protoc,import,路径
From: https://www.cnblogs.com/niuben/p/17368486.html

相关文章

  • Protobuf编码规则
    支持类型该表显示了在 .proto 文件中指定的类型,以及自动生成的类中的相应类型:.protoTypeNotesC++TypeJava/KotlinType[1]Java/Kotlin类型[1]PythonType[3]GoTypeRubyTypeC#TypePHPTypeDartTypedoubledoubledoublefloatfloat64Floatdoubl......
  • cpp: Prototype Pattern
     //Gold.h:此文件包含"Gold"类。原型模式PrototypePatternC++14//2023年5月1日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce#ifndefGOLD_H#defineGOLD_H#include<iostream>usingnamespacestd;namespaceDuJewelryPrototyp......
  • Mapreduce二次排序时,将jar包上传至Hadoop上运行时,抛出异常"java.util.NoSuchElementEx
    查询原因后发现是java中实现实现Mapper时StringTokenizer类时使用了一个方法nextToken()会抛出这个异常,”我们可以使用hasMoreTokens()和hasMoreElements()方法来避免异常。如果标记器的字符串中有更多标记可用,则这两种方法都返回true。只有当hasMoreTokens()方法返回Tr......
  • shader变体
    用法以multi_compile为例:Variant.shaderShader"My/Variant/Variant"{SubShader{//...Pass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#pragmamulti_compil......
  • [Javascript] avoid mutation: Array.prototype.toSpliced() vs splice()
    Array.prototype.splice()mutatestheoriginalarray.Toavoidmutation,weuseArray.prototype.slice().newmethodArray.prototype.toSpliced()returnanewarraytoavoidthemutation.constmonths=["Jan","Mar","Apr",&quo......
  • [Javascript] Avoid mutation, Array.prototype.toSorted() vs sort()
    sort(),mutatestheoriginalarray,andreturnthereferencetooriginalarrayandsorted.The toSorted() methodof Array instancesisthe copying versionofthe sort() method.Itreturnsanewarraywiththeelementssortedinascendingorder.const......
  • [Javascript] Avoid mutation, Array.prototype.toReversed() vs reverse()
    reverse()mutatestheoriginalarray,returnthereferencepointtotheoriginalarray.The toReversed() methodof Array instancesisthe copying counterpartofthe reverse() method.Itreturnsanewarraywiththeelementsinreversedorder.constite......
  • [Javascript] Array.prototype.with
    Prevously,whenwewanttoupateaniteminsideaarray:constitems=[{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'},{id:4,name:'d'},{id:5,name:'e'}]constnewIt......
  • vue学习 第五天 css基础 --- ps操作 / 圆角边框(border-radius) / 阴影(盒子/文字)b
      ps基本操作1、ps的基本操作2、ps快捷操作的位置3、样式书写习惯 4、样式设置的小细节(注意)1、图片设置width:100%这样图片的宽度就不会超过父容器的宽度。2、块元素没有设置宽度,给margin左右是没有效果的。......
  • protobuf使用(一)android ndk 编译 protobuf-3.6.x windows
    首先建议大家看好版本,环境,有可能因为小的变化会造成编译有问题: 我的环境是PC OS:windows10(没办法暂时没机器);NDK:android-ndk-r17b-windows-x86_64ProtoBuf:protobuf-3.6.x  下载链接:https://github.com/protocolbuffers/protobuf/tree/3.6.x代码生成工具:protoc-3.6.1-wi......