- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Go 创建一个基于微服务的 API,非常基础,只是为了学习一些东西。我必须实现三个主要目标。
目前我的结构如下所示(存储在 GOPATH 之外的 ~/Projects/tkg
中)。
每个“服务”都应该是一个用“whatever”编写的独立应用程序。如您所见,我有一个 Go 服务和一个 React 前端应用程序。此外,我想用一个 Makefile 来构建东西,但我可能会转向 shell 脚本、Docker 等。没关系。
现在问题来了。如何使生成的原型(prototype)文件在此设置中正常运行?我想我不了解 Go 模块和包,因为我无法设置它以便 articles.go
(来自 cmd
)可以访问生成的 api/article .pb.go
。怎么做?
// services/articles/go.mod
module tkg/services/articles
go 1.12
require (
github.com/golang/protobuf v1.3.2
google.golang.org/grpc v1.22.1
)
// services/articles/cmd/article.go
package main
import (
pb "tkg/services/articles/api/article"
)
type repository interface {
Create(*pb.Article) (*pb.Article, error)
}
func main() {
}
// services/articles/api/article.proto
syntax = "proto3";
package article;
option go_package = "tkg/services/articles/api/article";
...
// Makefile
build:
protoc services/articles/api/article.proto --go_out=.
我在 go.mod 中尝试了各种不同的包名称,在 proto 文件中尝试了不同的 go_packages,我尝试了不同的 protoc 命令和路径。我敢打赌这很愚蠢,对于精通 Go 的人来说这是非常明显的,但对于像我这样有 Node.js 背景的人来说,无法执行 import "../api/article.pb.go"
令人气愤。 :(
我收到的错误是:无法导入 tkg/services/articles/api/article(没有包 tkg/services/articles/api/article 的解析文件)
。当然,包名称具有不同的值。我已经尝试解决这个问题两天了。
您将如何解决这个问题?
最佳答案
如果您在与 .proto
文件(推荐)相同的目录中生成 .pb.go
文件,那么您的导入路径应为:
import (
pb "tkg/services/articles/api"
)
(不是 tkg/services/articles/api/article
。)
Go 包是单个目录中 .go 文件的集合 - 每个文件都有相同的 package XYZ
第一行 - 其中 XYZ 是包名称。因此,在导入包时,使用包基目录 - 不包括任何 .go 文件名。
编辑:(这太长了,无法容纳评论):
我会退一步思考整个项目的基本目录。
标准 go 包通常是诸如 time
、sync
等单个单词,因为它们是 go
标准库的一部分。所有其他包都应该有完整的互联网路径。这些通常与 git 存储库地址匹配(例如 "github.com/boltdb/bolt"
) - 但并不总是如此,例如(“gopkg.in/yaml.v2”
)。这实际上优于集中托管的 NPM 包模型 - 因为它可以轻松地从任何存储库主机提取包。此外,由于存储库被克隆到本地磁盘 - 这些相同的路径可以首先存在于本地磁盘上(在它们托管在互联网上之前,例如用于开发目的)。
所以我建议将您的本地基本目录命名为:
github.com/myname/myproj/tkg/services/...
然后确保您基于此目录结构导入包,例如
import "github.com/myname/myproj/tkg/services/api"
如果 go build
没有获取生成的 (.pb.go) 代码,则说明您的 GOPATH
出现问题,或者如果使用新的 go-模块你的 go.mod 设置。
关于go - 如何在 monorepo 中设置 protobuf、grpc 和 Go 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363662/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
想要从 nx 10 工作区移动到 12 而不离开角度 10。 nx migrate latest 但是升级也会默认升级 angular。 我搜索了 https://nx.dev/previous/an
我只是想知道为 monorepo 设置配置 codecov 的最佳方法是什么。例如,假设我的 monorepo 下有包 A 和 B。我目前使用 codecov 的方式是使用 github 操作 cod
我的 monorepo 中有以下文件结构 📦monorepo ┣ 📂node_modules ┣ 📂packages ┃ ┣ 📂package-1 ┃ ┃ ┗ 📜jest.confi
我有一个根据本教程设置的 monorepo:tutorial . 该项目由一个包含三个包的主文件夹 (series4) 组成,这三个包专注于 web、移动应用程序和通用代码 - 它们分别命名为 web
随着前端工程日益复杂,某些业务或者工具库通常涉及到很多个仓库,那么时间一长,多个仓库开发弊端日益显露,由此出现了一种新的项目管理方式——Monorepo。本文主要以 Monorepo 的概念、M
Canvas简历编辑器-Monorepo+Rspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践。在之前的文中我也提到过,因为是本着学习的态度以及对技术
我一直在网上搜索解决方案,但没有找到任何有值(value)的东西。基本上,我正在寻找一种工具或某种方式来同时在多个目录中启动 TypeScript 文件监视/编译。 我有一个带有作用域 NPM 包(@
假设我对 Javascript monorepo 有以下限制 -- module a package.json -- module b package.json package.json
在 monorepo 中,如果您在一个包中有依赖项,您可以在另一个包中使用该依赖项而不将其添加到该包中吗?为了更清楚,请检查以下布局。 Project |-packages |-
在我们的项目中,我们在整个公司中使用了多个 monorepos。问题是,例如我们有 monorepo-A 和 monorepo-B,而 monorepo-B 使用来自 monorepo-A 的组件(这
当 monorepo 中的包具有对等依赖项时,在开发过程中应该如何使这些依赖项对它们可用? 例如 /packages/namespace/alpha/ 的包裹可能有 devDependency的 st
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我们最近决定从 TFVC 迁移到 Git,我正在努力寻找设计新 Git 架构的最佳方法。 我们的代码由独立但紧密耦合的模块组成,让我们看看以下项目: CommonLib1 CommonLib2 App
在 monorepos 中是否有使用版本标签的标准? 1.0.0-myapp1 和 2.1.0-myapp2 是否可以接受?还是有另一种方法来区分应用程序之间的版本? 最佳答案 tags被组织在目录和
我们想在库和我们的应用程序中使用 @emotion/react 中的 useTheme 我们正在使用:-react-native-web-nx 单体仓库- native react 这是我们的结构
我有一个使用 lerna 和 yarn 工作区的 monorepo 用于前端应用程序和库。我在根 package.json 中添加了一系列 npm 脚本,以管理每个包(应用程序、库、插件),就像本文末
我们有一个代码库已经被多个项目堵塞了——所以它现在是一个单一代码库。 我们需要将多个文件夹连同它们的历史一起分解成新的存储库。即: Current repo "Monorepo" folders:
我正在开发一个由多个 git 存储库组成的项目。有多个微服务、一个前端、一些 npm 包和网关容器等。 由于我经常遇到这样的问题,即对于新功能,我必须更改多个存储库中的代码,我会在很多 pull 请求
我在 GitLab 中有一个使用 Feature Branch 方法的 monorepo。 我想要实现的是启动与包含更改文件的目录相关联的管道部分。所以我的 .gitlab-ci.yml 看起来像:
我是一名优秀的程序员,十分优秀!