我尝试使用Gorm golang连接到Google CloudSQL PostgresSQL,但似乎无法正常工作。
这是代码
func InitDB() *gorm.DB {
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"))
db, err := gorm.Open("postgres", psqlInfo)
if err != nil {
fmt.Println("Failed to connect to the Database")
}
fmt.Println("Connected to the Database")
DB = db
return DB
}
如果im使用localhost配置,则一切正常。查看我的.env文件以获取cloudSQL配置
DB_HOST=trader-234509:us-central1:testv1
DB_PORT=5432
DB_USER=username
DB_NAME=testv1
DB_PASSWORD=
错误在说
拨号tcp:查找交易者-234509:us-central1:testv1:没有这样的主机 紧急:运行时错误:无效的内存地址或nil指针取消引用 [signal SIGSEGV:细分违规代码= 0x1 addr = 0x40 pc = 0x164681d]
我的本地配置(该配置很好)
DB_HOST=localhost
DB_PORT=5432
DB_USER=username
DB_NAME=test
DB_PASSWORD=
我做错了什么吗?
答案 0 :(得分:0)
Cloud SQL尚不支持直接连接到第三方应用程序的实例名称,有关详细信息:https://cloud.google.com/sql/docs/mysql/connect-external-app
根据我的经验,有两种解决方案:
按照上述说明,您可以按照以下步骤设置Cloud Proxy,连接流程为:Golang应用-> Cloud Proxy-> Cloud SQL
这种方法很灵活,您可以使用防火墙控制连接。
但是您必须花费额外的$$来维护服务器和该云代理实例,我也听说云代理可能存在一些性能问题,但到目前为止我还没有确切的证据
将私有IP分配给Cloud SQL实例,请参考https://cloud.google.com/sql/docs/mysql/private-ip,以便您的应用程序可以使用该IP直接访问数据库。
权衡显然是应用程序必须位于项目的同一网络中,但这是一种更为方便的方法,尤其是。您所有的应用程序都托管在同一网络中
我没有尝试使用公共IP访问方法,因为如果需要远程网络连接,云代理正是我所需要的
简而言之,您需要使用选项2在VM或其他Google托管服务中部署代码,或设置云代理以支持选项1的本地调试
希望有帮助