我無法使用“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)
}

猛跑小豬
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) }
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消