新浪博客

BeginBazelChap06

2025-05-11 17:21阅读:
1. go.mod中加入非标仓库中的项目,如: require google.golang.org/protobuf v1.36.6
需要在MODULE.bazel文件中增加相应内容,如:
use_repo(
go_deps,
'org_golang_google_protobuf',
)
域名要颠倒,. 改成 _
------------------------------------------------------------------------------------
2. go.mod中的 go 1.23.4 要与MODULE.bazel 中的内容一致:
go_sdk = use_extension('@rules_go//go:extensions.bzl', 'go_sdk')
go_sdk.download(version = '1.23.4')
也即是制定了开发项目使用的go版本号
------------------------------------------------------------------------------------
3. go.sum 文件是 bazel build必备。通过 go mod tidy 自动生成内容,不要手动修改。
如需清理,使用 go clean -modcache。
------------------------------------------------------------------------------------
4. MODULE.bazel 不需要添加可能已被包含的模块,通常下面两个就够了。
module(name = 'myproject')
bazel_dep(
name = 'rules_go', version = '0.52.0')
bazel_dep(name = 'gazelle', version = '0.42.0')
go_sdk = use_extension('@rules_go//go:extensions.bzl', 'go_sdk')
go_sdk.download(version = '1.23.4')
go_deps = use_extension('@gazelle//:extensions.bzl', 'go_deps')
go_deps.from_file(go_mod = '//:go.mod')
------------------------------------------------------------------------------------
5. 为使用gazelle,需要在go.mod同级目录(项目根目录)创建BUILD.bazel文件
load('@bazel_gazelle//:def.bzl', 'gazelle')
gazelle(
name = 'gazelle',
args = ['-go_prefix=myproject'],
visibility = ['//visibility:public'],
)
------------------------------------------------------------------------------------
6.src/BUILD 文件内容如下:
load('@rules_go//go:def.bzl', 'go_binary', 'go_library')
load('@rules_go//proto:def.bzl', 'go_proto_library')
proto_library(
name = 'transmission_object_proto',
srcs = ['transmission_object.proto'],
)
go_proto_library(
name = 'transmission_object_go_proto',
importpath = 'myproject/src/transmission_object',
proto = ':transmission_object_proto',
visibility = ['//visibility:public'],
)
go_binary(
name = 'echo_server',
srcs = ['echo_server.go'],
deps = [
':transmission_object_go_proto',
'@org_golang_google_protobuf//proto:go_default_library',
],
)
java_proto_library(
name = 'transmission_object_java_proto',
deps = [':transmission_object_proto'],
)
java_binary(
name = 'echo_client',
srcs = ['EchoClient.java'],
main_class = 'EchoClient',
deps = [':transmission_object_java_proto'],
)
需注意:
1> load两行够用,与MODULE.bazel对应
2> importpath 如果是使用本地文件,可按目录结构填写
------------------------------------------------------------------------------------
7. proto文件 内容如下:
syntax = 'proto3';
package transmission_object;
option go_package = 'myproject/src/transmission_object;transmission_object';
message TransmissionObject{
float value = 1;
string message = 2;
}
说明:
1> package 可自动供Java,C#,Python使用,但不适用于Go。
2> option go_package供Go使用,注意字符串中的;
------------------------------------------------------------------------------------
8. Go语言 import
import (
'fmt'
'log'
'net'
'google.golang.org/protobuf/proto'
'myproject/src/transmission_object'
)
最下两行一个是非标准模块的引入,一个是本地模块的引入。
一知半解,记录备忘 2025-5-11

我的更多文章

下载客户端阅读体验更佳

APP专享