加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

BeginBazelChap06

(2025-05-11 17:21:40)
标签:

bazel

go

分类: Qt/Go
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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有