library

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 7, 2026 License: Apache-2.0

README

Go-Kit Library / Go 内部组件库

A unified, production-grade Go component library for machine translation across multiple cloud providers.


Go 内部组件库

一套高内聚、低耦合的 Go 组件库,统一封装多云厂商机器翻译能力,开箱即用。


Table of Contents / 目录


Features / 特性

  • Unified Interface / 统一接口
    All providers implement the same Translator interface (Translate / TranslateBatch), so business code never depends on a specific cloud SDK.
    所有平台均实现相同的 Translator 接口(Translate / TranslateBatch),业务代码不依赖具体云厂商 SDK。

  • Credential Isolation / 凭据隔离
    Sensitive credentials are injected via Functional Options at runtime. No hardcoded secrets or default values in Config structs.
    敏感凭据通过 Functional Options 在运行时注入,Config 结构体中不提供默认值或硬编码。

  • Single & Batch Translation / 单条与批量翻译
    Every driver supports both single-text translation and batch translation.
    所有驱动均支持单条翻译和批量翻译。

  • Driver Isolation / 驱动隔离
    Each provider lives in its own sub-package with independent Config, error types, and tests. No cross-dependencies between drivers.
    每个平台独立子包,拥有独立的 Config、错误类型和测试,驱动间无跨依赖。

  • Production Ready / 生产就绪
    Table-Driven unit tests with ≥50% coverage, error wrapping with context, GoDoc comments, and Conventional Commits.
    单元测试覆盖率 ≥50%,错误包装携带上下文,GoDoc 注释完整,Commit 遵循 Conventional Commits。


Supported Providers / 支持的平台

Provider / 平台 Mode / 模式 Auth / 鉴权 Single / 单条 Batch / 批量 Package / 包
Alibaba Cloud / 阿里云 General AccessKey ✅ (native batch API) pkg/translate/aliyun
Baidu Translate / 百度翻译 General AppID + SecretKey (MD5 sign) ✅ (\n joined single API call) pkg/translate/baidu
Baidu Translate / 百度翻译 Large Model (LLM) Bearer Token / MD5 sign ✅ (\n joined single API call) pkg/translate/baidu
Tencent TokenHub / 腾讯云 Large Model (LLM) API Key ✅ (<SEP> joined single prompt) pkg/translate/tencent

Quick Start / 快速开始

go get github.com/zhangshj/library/pkg/translate/aliyun
go get github.com/zhangshj/library/pkg/translate/baidu
go get github.com/zhangshj/library/pkg/translate/tencent
Alibaba Cloud / 阿里云
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/zhangshj/library/pkg/translate"
    "github.com/zhangshj/library/pkg/translate/aliyun"
)

func main() {
    ctx := context.Background()
    tr, err := aliyun.New(
        translate.DefaultConfig(),
        aliyun.WithAccessKey("your-access-key-id", "your-access-key-secret"),
    )
    if err != nil {
        log.Fatal(err)
    }

    // Single text / 单条翻译
    result, err := tr.Translate(ctx, "Hello World", "en", "zh")
    if err != nil {
        log.Println("translate failed:", err)
    } else {
        fmt.Println(result)
    }

    // Batch translation / 批量翻译
    results, err := tr.TranslateBatch(ctx, []string{"Hello", "World"}, "en", "zh")
    if err != nil {
        log.Println("batch translate failed:", err)
    } else {
        fmt.Println(results)
    }
}
Baidu Translate / 百度翻译
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/zhangshj/library/pkg/translate"
    "github.com/zhangshj/library/pkg/translate/baidu"
)

func main() {
    ctx := context.Background()
    tr, err := baidu.New(
        translate.DefaultConfig(),
        baidu.WithAppID("your-appid"),
        baidu.WithAPIKey("your-api-key"),
        baidu.WithSecretKey("your-secret-key"),
        baidu.WithMode("llm"),               // "general" or "llm"
        baidu.WithLLMAuth("bearer"),          // "bearer" or "sign"
    )
    if err != nil {
        log.Fatal(err)
    }

    // Single text / 单条翻译
    result, err := tr.Translate(ctx, "Hello World", "en", "zh")
    if err != nil {
        log.Println("translate failed:", err)
    } else {
        fmt.Println(result)
    }

    // Batch translation / 批量翻译
    results, err := tr.TranslateBatch(ctx, []string{"Hello", "World"}, "en", "zh")
    if err != nil {
        log.Println("batch translate failed:", err)
    } else {
        fmt.Println(results)
    }
}
Tencent TokenHub / 腾讯云
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/zhangshj/library/pkg/translate"
    "github.com/zhangshj/library/pkg/translate/tencent"
)

func main() {
    ctx := context.Background()
    tr, err := tencent.New(
        translate.DefaultConfig(),
        tencent.WithAPIKey(os.Getenv("TOKENHUB_API_KEY")),
    )
    if err != nil {
        log.Fatal(err)
    }

    // Single text / 单条翻译
    result, err := tr.Translate(ctx, "Hello World", "en", "zh")
    if err != nil {
        log.Println("translate failed:", err)
    } else {
        fmt.Println(result)
    }

    // Batch translation / 批量翻译
    results, err := tr.TranslateBatch(ctx, []string{"Hello", "World"}, "en", "zh")
    if err != nil {
        log.Println("batch translate failed:", err)
    } else {
        fmt.Println(results)
    }
}

Project Structure / 项目结构

.
├── AGENTS.md                          # Development rules / 开发规范
├── LICENSE                            # Apache 2.0 / Apache 2.0 许可证
├── go.mod                             # Go module definition
├── pkg/
│   └── translate/
│       ├── interface.go               # Translator interface / 翻译接口定义
│       ├── config.go                  # Shared top-level config / 共享配置
│       ├── aliyun/                    # Alibaba Cloud driver / 阿里云驱动
│       │   ├── aliyun.go
│       │   └── aliyun_test.go
│       ├── baidu/                     # Baidu Translate driver / 百度翻译驱动
│       │   ├── baidu.go
│       │   └── baidu_test.go
│       ├── tencent/                   # Tencent TokenHub driver / 腾讯云驱动
│       │   ├── tencent.go
│       │   └── tencent_test.go
│       └── mock/                      # In-memory mock driver / 内存 Mock 驱动
│           ├── mock.go
│           └── mock_test.go
├── examples/
│   └── translate/
│       ├── aliyun/main.go             # Alibaba Cloud example / 阿里云示例
│       ├── baidu/main.go              # Baidu Translate example / 百度示例
│       └── tencent/main.go            # Tencent TokenHub example / 腾讯示例
└── docs/
    └── translate/
        ├── getting_started.md         # Quick start guide / 快速开始
        ├── configuration.md           # Config reference / 配置参考
        └── architecture.md            # Design rationale / 设计思路

Documentation / 文档

  • Getting Started / 快速开始: docs/translate/getting_started.md
  • Configuration / 配置说明: docs/translate/configuration.md
  • Architecture / 架构设计: docs/translate/architecture.md

Development / 开发

Prerequisites / 前置要求
  • Go 1.20+
  • Git
Build & Test / 构建与测试
go build ./...
go test ./...
Code Standards / 代码规范

This project follows strict modular and security rules defined in AGENTS.md:

  • Modular / 模块化: Each driver in its own sub-package; no cross-dependencies.
    每个驱动独立子包,禁止跨组件依赖。
  • Security / 安全: No hardcoded secrets; credentials injected at runtime.
    无硬编码密钥;凭据运行时注入。
  • Documentation Sync / 文档同步: Technical changes must be reflected in docs immediately.
    技术方案变更后,文档必须同步更新。
  • Testing / 测试: Table-Driven tests with ≥50% coverage.
    单元测试覆盖率 ≥50%。

License / 许可证

Licensed under the Apache License 2.0.

本仓库采用 Apache License 2.0 开源协议。

Directories

Path Synopsis
examples
ratelimit command
Command ratelimit-demo demonstrates the full lifecycle of the ratelimit component: build config -> initialize store + limiter -> normal calls (Check / Incr / Reset) -> ban behavior (exceeding limit triggers a ban with independent BanDuration) -> error handling (fail-open on store error).
Command ratelimit-demo demonstrates the full lifecycle of the ratelimit component: build config -> initialize store + limiter -> normal calls (Check / Incr / Reset) -> ban behavior (exceeding limit triggers a ban with independent BanDuration) -> error handling (fail-open on store error).
translate/baidu command
pkg
ratelimit
Package ratelimit provides a pluggable, framework-agnostic rate limiter with pluggable storage backends.
Package ratelimit provides a pluggable, framework-agnostic rate limiter with pluggable storage backends.
translate
Package translate provides top-level configuration for the translation component.
Package translate provides top-level configuration for the translation component.
translate/aliyun
Package aliyun implements the Translator interface using Alibaba Cloud Machine Translation (alimt).
Package aliyun implements the Translator interface using Alibaba Cloud Machine Translation (alimt).
translate/baidu
Package baidu implements the Translator interface using Baidu Translation APIs.
Package baidu implements the Translator interface using Baidu Translation APIs.
translate/mock
Package mock provides a non-networked, in-memory implementation of Translator for testing and demos.
Package mock provides a non-networked, in-memory implementation of Translator for testing and demos.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL