为了账号安全,请及时绑定邮箱和手机立即绑定

为 pgxpool.Config 设置 DialFunc

为 pgxpool.Config 设置 DialFunc

Go
慕容森 2022-10-24 16:56:12
我无法使用“github.com/jackc/pgx/v4/pgxpool”库通过 ssh 隧道创建与 postgres 数据库的连接。我似乎无法弄清楚如何为我想用来建立连接的 *pgxpool.Config 设置 DialFunc。这就是我想要做的:        sshConnStr := mkPostgresXViaSSHConnStr(config, tz)                config, err := parseSshConnStr(sshConnStr)        // var config *pgsshConfig        sshcon, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", config.tunnelHost, config.tunnelConfig), &config.tunnelConfig)        // var sshcon *ssh.Client        cfg, err = pgxpool.ParseConfig(config.pgConnStr)        // var cfg *pgxpool.Config        cfg.ConnConfig.DialFunc = func(network, addr string) (net.Conn, error) {            return sshcon.Dial(network, addr)        }当我尝试设置 DialFunc 时,出现以下错误:无法使用 (func(network, addr string) (net.Conn, error) literal) (value of type func(network string, addr string) (net.Conn, error )) 作为赋值中的 pgconn.DialFunc 值关于如何让它工作的任何建议?
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

添加上下文并转换为pgconn.DialFunc:


package main


import (

        "context"

        "net"


        "github.com/jackc/pgconn"

        "github.com/jackc/pgx/v4/pgxpool"

)


func main() {

        cfg, _ := pgxpool.ParseConfig("")

        myDial := func(ctx context.Context, network, addr string) (net.Conn, error) {

                return nil, nil

        }

        cfg.ConnConfig.DialFunc = pgconn.DialFunc(myDial)

}


查看完整回答
反对 回复 2022-10-24
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我正在查看 DialFunc 的错误类型。对于 pgx/v3.6.2,只需要网络和地址作为参数。在更新版本中,pgx/v4 context.Context 也需要作为变量传递(无论是否实际使用)。修复错误的更新是这样的:

cfg.ConnConfig.DialFunc = func(ctx context.Context, network, addr string) (net.Conn, error) {
           return sshcon.Dial(network, addr)
           }


查看完整回答
反对 回复 2022-10-24
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号