golang中连接达梦数据库使用域名来代替IP时会出现解析问题

中间件使用gorm

复制代码
driverName := "dm"
dataSourceName := fmt.Sprintf("dm://%s:%s@%s:%s/SYSDBA?charset=utf8&parseTime=true", config.Database.Username, config.Database.Password, config.Database.Address, config.Database.Port)

config.Database.Address 这里使用了比如"dm8"这样的字符串,而不是ip

执行程序会遇到Error 6001: Communication error dial address: localhost:5236的报错

这个是因为dm的驱动包中有问题,我这里使用的是V1.0.0版本的驱动
在n.go文件中,func (c *DmConnector) mergeConfigs(dsn string) error函数中有这样的逻辑

复制代码
host, port, err := net.SplitHostPort(host)
if err != nil || net.ParseIP(host) == nil {
 c.host = hostDef
} else {
 c.host = host
}

这里可以看到,会对域名进行格式校验,如果不是合法IP,则将其替换成了hostDef,也就是localhost。
吐槽一下,两个host明明不是同一个东西,为啥不能使用2个名称呢

所以将其修改

复制代码
if err != nil {
   c.host = hostDef
} else if net.ParseIP(host) == nil {
   if ip, err := net.LookupHost(host); err != nil {
      c.host = hostDef
   } else {
      if len(ip) == 1 {
         c.host = ip[0]
      } else {
         c.host = hostDef
      }
   }
} else {
   c.host = host
}
相关推荐
zcmodeltech3 小时前
智慧矿山沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的智能开采、无人矿卡、数字孪生全场景联动方案
数据库·stm32·单片机·嵌入式硬件·物联网
小码过河.3 小时前
ocean自增主键模式说明
数据库·oracle
geovindu3 小时前
java:Observer Pattern
java·开发语言·后端·观察者模式·设计模式·行为模式
Am-Chestnuts3 小时前
通义千问任务清单怎么导出Word?用DS随心转保留层级和勾选项
开发语言·c#·word
leoZ2313 小时前
2026-09-08-mysql-57-init-walkthrough
前端·javascript·数据库·vue.js·opencv·mysql·adb
云飞云共享云桌面3 小时前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造
liliangcsdn3 小时前
基于信号强度的稀疏选股算法的探索分析
开发语言·python
大树913 小时前
把 Java 项目从手动 SCP 升级到 Gitee Go 自动部署:一份踩坑实录
java·golang·gitee
4SAPI3 小时前
2026年大模型API接入选型指南:企业与个人用户的架构、稳定性与成本考量
大数据·开发语言·数据库·人工智能·架构·php