gpt4 book ai didi

pointers - Golang 方法函数中的接收者类型无效

转载 作者:IT王子 更新时间:2023-10-29 01:49:13 26 4
gpt4 key购买 nike

我正在尝试制作一个简单的包来将 SSH 命令发送到服务器。

我有以下代码:

type Connection *ssh.Client

func Connect(addr, user, password string) (conn Connection, err error) {
sshConfig := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.HostKeyCallback(func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil }),
}

conn, err = ssh.Dial("tcp", addr, sshConfig)
return
}

func (conn Connection) SendCommand() ([]byte, error) {
session, err := (*ssh.Client)(conn).NewSession()
// ...
}

我的问题是在 func (conn Connection) SendCommand() ([]byte, error)session, err := (*ssh.Client)(conn) 这两条线上.NewSession().

我不知道如何从我的覆盖 Connection 类型中使用可用于 *ssh.Client 的方法。

我知道我需要做一些转换,使用 ssh.Client(*conn).NewSession() 会起作用,但它会复制 *ssh.Client 的值 这似乎不是正确的方法。

在使用我的自定义 type Connection *ssh.Client 类型时,应该如何访问可用于 *ssh.Client 的方法?

最佳答案

您不能使用指针 TypeSpec 声明新类型。还声明一个新类型专门用于删除整个方法集,因此您将不会拥有 *ssh.Client 中的任何原始方法。

您想要的是通过将 *ssh.Client 嵌入到您自己的结构类型中来使用组合:

type Connection struct {
*ssh.Client
}

func Connect(addr, user, password string) (*Connection, error) {
sshConfig := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.HostKeyCallback(func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil }),
}

conn, err = ssh.Dial("tcp", addr, sshConfig)
if err != nil {
return nil, err
}

return &Connection{conn}, nil
}

func (conn *Connection) SendCommand() ([]byte, error) {
session, err := conn.NewSession()
// ...
}

关于pointers - Golang 方法函数中的接收者类型无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44406077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com