# tylin-go-common **Repository Path**: uesugi-java/tylin-go-common ## Basic Information - **Project Name**: tylin-go-common - **Description**: go语言中间件库移入方便在外网开发中可以打包 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-22 - **Last Updated**: 2026-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # tylin-go-common 使用说明 ## 仓库地址 项目仓库地址: ```text https://gitee.com/uesugi-java/tylin-go-common/tree/v0.1.0 ``` Go 模块路径: ```text gitee.com/uesugi-java/tylin-go-common ``` 调用方项目应当使用上面的模块路径引入包,不要使用本地目录名作为 import 路径。 ## 安装方式 在调用方项目中执行: ```bash go get gitee.com/uesugi-java/tylin-go-common@v0.1.0 ``` 如果调用方项目还没有初始化 Go module,先执行: ```bash go mod init your-project-name go get gitee.com/uesugi-java/tylin-go-common@v0.1.0 ``` 然后执行: ```bash go mod tidy ``` ## 组件 import 路径 | 组件 | import 路径 | 说明 | | --- | --- | --- | | cache | `gitee.com/uesugi-java/tylin-go-common/pkg/cache` | 统一缓存接口与 Redis 工厂入口 | | config | `gitee.com/uesugi-java/tylin-go-common/pkg/config` | YAML、Nacos、Consul 配置读取入口 | | crypto | `gitee.com/uesugi-java/tylin-go-common/pkg/crypto` | Base64、随机数、MD5、SHA256、RSA | | idempotent | `gitee.com/uesugi-java/tylin-go-common/pkg/idempotent` | 基于 cache 的幂等控制 | | mq | `gitee.com/uesugi-java/tylin-go-common/pkg/mq` | RocketMQ、RabbitMQ 消息发送与消费入口 | | registry | `gitee.com/uesugi-java/tylin-go-common/pkg/registry` | Nacos、Consul 服务注册发现入口 | | storage | `gitee.com/uesugi-java/tylin-go-common/pkg/storage` | 本地文件、OSS 存储入口 | | async | `gitee.com/uesugi-java/tylin-go-common/pkg/async` | goroutine 异步任务处理器 | 通常情况下,业务项目只需要引入组件根包,例如 `pkg/cache`、`pkg/mq`。具体实现子包由根包工厂根据配置选择,业务代码不需要直接依赖 `redis`、`rabbitmq`、`nacos` 等子包。 ## Cache 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/cache" ``` 示例: ```go c, err := cache.New( cache.WithProvider(cache.ProviderRedis), cache.WithRedisAddr("127.0.0.1:6379"), cache.WithRedisDB(0), ) if err != nil { return err } defer c.Close() err = c.Set(ctx, "user:1", []byte("tom"), time.Minute) ``` ## Config 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/config" ``` 本地 YAML: ```go cfg, err := config.New( config.WithSource(config.SourceYAML), config.WithPath("config.yaml"), ) name := cfg.GetString("app.name") ``` Nacos: ```go cfg, err := config.New( config.WithSource(config.SourceNacos), config.WithAddress("127.0.0.1:8848"), config.WithNacos("public", "DEFAULT_GROUP", "app.yaml"), ) ``` Consul: ```go cfg, err := config.New( config.WithSource(config.SourceConsul), config.WithAddress("127.0.0.1:8500"), config.WithPath("config/app.yaml"), ) ``` ## Crypto 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/crypto" ``` 示例: ```go md5Value := crypto.MD5Hex([]byte("hello")) shaValue := crypto.SHA256Hex([]byte("hello")) privateKey, err := crypto.ParseRSAPrivateKey(privatePEM) publicKey, err := crypto.ParseRSAPublicKey(publicPEM) signature, err := crypto.RSASignSHA256(privateKey, []byte("payload")) err = crypto.RSAVerifySHA256(publicKey, []byte("payload"), signature) ``` ## Idempotent 引入: ```go import ( "gitee.com/uesugi-java/tylin-go-common/pkg/cache" "gitee.com/uesugi-java/tylin-go-common/pkg/idempotent" ) ``` 示例: ```go c, err := cache.New(cache.WithRedisAddr("127.0.0.1:6379")) manager, err := idempotent.New(idempotent.WithCache(c)) first, err := manager.CheckAndStore(ctx, "order-1001", 5*time.Minute) if !first { return nil } ``` ## MQ 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/mq" ``` RocketMQ: ```go producer, err := mq.NewProducer( mq.WithRocketMQ([]string{"127.0.0.1:9876"}, "order-producer"), ) err = producer.Send(ctx, &mq.Message{ Topic: "orders", Key: "1001", Payload: []byte("created"), }) ``` RabbitMQ: ```go consumer, err := mq.NewConsumer( mq.WithRabbitMQ("amqp://guest:guest@127.0.0.1:5672/", "", "orders", "orders"), ) consumer.RegisterHandler("*", func(ctx context.Context, msg *mq.Message) error { return nil }) err = consumer.Start(ctx) ``` ## Registry 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/registry" ``` Nacos: ```go r, err := registry.New( registry.WithProvider(registry.ProviderNacos), registry.WithAddress("127.0.0.1:8848"), ) err = r.Register(ctx, ®istry.ServiceInfo{ Name: "order-service", Address: "127.0.0.1", Port: 8080, }) ``` Consul: ```go r, err := registry.New( registry.WithProvider(registry.ProviderConsul), registry.WithAddress("127.0.0.1:8500"), ) services, err := r.Discover(ctx, "order-service") ``` ## Storage 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/storage" ``` 本地文件: ```go s, err := storage.New(storage.WithLocal("./data/files", "http://localhost/files")) err = s.Upload(ctx, "orders/1001.json", []byte("{}")) ``` OSS: ```go s, err := storage.New( storage.WithOSS("oss-cn-hangzhou.aliyuncs.com", accessKeyID, accessKeySecret, "bucket-name"), ) url, err := s.SignURL(ctx, "orders/1001.json", time.Minute) ``` ## Async 引入: ```go import "gitee.com/uesugi-java/tylin-go-common/pkg/async" ``` 无返回结果任务: ```go p := async.New(async.WithWorkers(8), async.WithQueueSize(1024)) err := p.Start(ctx) defer p.Close() future, err := p.Submit(ctx, func(ctx context.Context) error { return nil }) _, err = future.Await(ctx) ``` 有返回结果任务: ```go future, err := async.SubmitResult(ctx, p, func(ctx context.Context) (int, error) { return 1, nil }) value, err := future.Await(ctx) ``` ## 外部中间件依赖 这些组件封装的是真实中间件能力。使用 Redis、Nacos、Consul、RocketMQ、RabbitMQ、OSS 时,调用方需要准备对应服务和连接配置。没有启动外部服务时,客户端创建或实际调用可能会返回连接错误。