Files
core/with/etcd.go
yanweidong 21716c4340 ```
feat(database): 自动迁移表结构并优化数据库初始化函数

将 `AutoMigrate` 逻辑从各数据库初始化方法中提取至统一的 `NewDatabase` 方法内,
避免重复代码。同时修改 `Databases`、`Etcd`、`Memory` 和 `RedisCache` 函数签名,
使其返回实例而非通过参数传递,提高代码可读性和一致性。
```
2025-09-23 16:17:03 +08:00

55 lines
1.1 KiB
Go

package with
import (
"time"
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
"go.etcd.io/etcd/client/pkg/v3/transport"
clientv3 "go.etcd.io/etcd/client/v3"
)
func Etcd(cfg *conf.EtcdConf) (cli *clientv3.Client){
if cfg == nil || len(cfg.Endpoints) == 0 {
return
}
etcdCfg := clientv3.Config{
Endpoints: cfg.Endpoints,
DialTimeout: 5 * time.Second,
}
if cfg.Passwd != nil {
etcdCfg.Username = cfg.Passwd.Account
etcdCfg.Password = cfg.Passwd.Password
}
if cfg.TLS != nil {
tlsInfo := transport.TLSInfo{
TrustedCAFile: cfg.TLS.CaFile,
CertFile: cfg.TLS.CertFile,
KeyFile: cfg.TLS.KeyFile,
}
tlsConfig, err := tlsInfo.ClientConfig()
if err != nil {
print.Error(errcode.ErrEtcd.Error())
panic(err)
}
etcdCfg.TLS = tlsConfig
}
var err error
cli, err = clientv3.New(etcdCfg)
if err != nil {
print.Error(errcode.ErrEtcd.Error())
panic(err)
}
// print inform.
print.Info("[BSM - %s] Service Center: %v", vars.ServiceKey, cfg.Endpoints)
return
}