golang error信息 转 字符串 x := fmt.Sprintf(“%s“, err)

本文介绍如何在Go语言中将错误信息转换为字符串,以便于更有效地判断错误原因并采取相应措施。通过具体代码实例,展示了如何使用fmt.Sprintf和strings.Contains方法来检查特定类型的错误,并在日志中记录错误详情。

将错误信息转换为字符串,便于判断错误原因,进行相应操作

实例如下:

_, _, ch, err := m.ZkConn.ChildrenW(node)
if err != nil {
    x := fmt.Sprintf("%s", err)
    if strings.Contains(x, "node does not exist"){
        log.Error(fmt.Sprintf("node %s error: %s", m.tcpMonTaskNode, x))
        return
    }
    panic(err)
}

 

 

func TransferDirectory(client *ssh.Client, localDir, remoteDir string) error { fmt.Println("++++++++++--------------------++++++++++") fmt.Println(localDir) fmt.Println(remoteDir) fmt.Println("++++++++++--------------------++++++++++") sftpClient, err := sftp.NewClient(client) if err != nil { return err } defer sftpClient.Close() // 当 remoteDir 为 /root 时,创建 csvfile 文件夹 if remoteDir == "/root" { csvDir := filepath.Join(remoteDir, "csvfile") if err := sftpClient.MkdirAll(csvDir); err != nil { return fmt.Errorf("创建 csvfile 文件夹失败: %v", err) } // 设置 csvfile 文件夹权限为755 chmodCmd := fmt.Sprintf("chmod 755 %s", csvDir) session, err := client.NewSession() if err != nil { return fmt.Errorf("无法创建 SSH 会话: %v", err) } defer session.Close() if err := session.Run(chmodCmd); err != nil { return fmt.Errorf("设置 csvfile 文件夹权限失败: %v", err) } } // 确保远程目录存在并设置权限 if err := sftpClient.MkdirAll(remoteDir); err != nil { return fmt.Errorf("创建远程目录失败: %v", err) } // 设置远程目录权限为755 chmodCmd := fmt.Sprintf("chmod 755 %s", remoteDir) session, err := client.NewSession() if err != nil { return fmt.Errorf("无法创建 SSH 会话: %v", err) } defer session.Close() if err := session.Run(chmodCmd); err != nil { return fmt.Errorf("设置目录权限失败: %v", err) } err = filepath.Walk(localDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // 计算相对路径 relPath, err := filepath.Rel(localDir, path) if err != nil { return err } // 使用 filepath.ToSlash 确保路径分隔符统一 relPath = filepath.ToSlash(relPath) remotePath := filepath.Join(remoteDir, relPath) if info.IsDir() { // 创建远程目录 if err := sftpClient.MkdirAll(remotePath); err != nil { return fmt.Errorf("创建远程子目录失败: %v", err) } // 设置远程子目录权限为755 chmodSubDirCmd := fmt.Sprintf("chmod 755 %s", remotePath) if err := session.Run(chmodSubDirCmd); err != nil { return fmt.Errorf("设置子目录权限失败: %v", err) } } else { // 确保文件所在目录存在 remoteFileDir := filepath.Dir(remotePath) if err := sftpClient.MkdirAll(remoteFileDir); err != nil { return fmt.Errorf("创建文件目录失败: %v", err) } // 打开本地文件 localFile, err := os.Open(path) if err != nil { return fmt.Errorf("无法打开本地文件: %v", err) } defer localFile.Close() // 创建远程文件 remoteFile, err := sftpClient.Create(remotePath) if err != nil { return fmt.Errorf("创建远程文件失败: %v", err) } defer remoteFile.Close() // 复制文件内容 if _, err := io.Copy(remoteFile, localFile); err != nil { return fmt.Errorf("文件内容复制失败: %v", err) } } return nil }) return err }你在服务器上生成了'\root\csvfile' 这种奇怪的文件夹 我要的是root路径下中有csvfile文件夹,csvfile文件夹有我本地csvfile文件夹下的csv文件
11-01
func TransferDirectory(client *ssh.Client, localDir, remoteDir string) error { fmt.Println("++++++++++--------------------++++++++++") fmt.Println(localDir) fmt.Println(remoteDir) fmt.Println("++++++++++--------------------++++++++++") sftpClient, err := sftp.NewClient(client) if err != nil { return err } defer sftpClient.Close() // 确保远程目录存在并设置权限 if err := sftpClient.MkdirAll(remoteDir); err != nil { return fmt.Errorf("创建远程目录失败: %v", err) } // 设置远程目录权限为755 chmodCmd := fmt.Sprintf("chmod 755 %s", remoteDir) session, err := client.NewSession() if err != nil { return fmt.Errorf("无法创建SSH会话: %v", err) } defer session.Close() if err := session.Run(chmodCmd); err != nil { return fmt.Errorf("设置目录权限失败: %v", err) } err = filepath.Walk(localDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // 计算相对路径 relPath, err := filepath.Rel(localDir, path) if err != nil { return err } // 使用filepath.ToSlash确保路径分隔符统一 relPath = filepath.ToSlash(relPath) remotePath := filepath.Join(remoteDir, relPath) if info.IsDir() { // 创建远程目录 if err := sftpClient.MkdirAll(remotePath); err != nil { return fmt.Errorf("创建远程子目录失败: %v", err) } // 设置远程子目录权限为755 chmodSubDirCmd := fmt.Sprintf("chmod 755 %s", remotePath) if err := session.Run(chmodSubDirCmd); err != nil { return fmt.Errorf("设置子目录权限失败: %v", err) } } else { // 确保文件所在目录存在 remoteFileDir := filepath.Dir(remotePath) if err := sftpClient.MkdirAll(remoteFileDir); err != nil { return fmt.Errorf("创建文件目录失败: %v", err) } // 打开本地文件 localFile, err := os.Open(path) if err != nil { return fmt.Errorf("无法打开本地文件: %v", err) } defer localFile.Close() // 创建远程文件 remoteFile, err := sftpClient.Create(remotePath) if err != nil { return fmt.Errorf("创建远程文件失败: %v", err) } defer remoteFile.Close() // 复制文件内容 if _, err := io.Copy(remoteFile, localFile); err != nil { return fmt.Errorf("文件内容复制失败: %v", err) } } return nil }) return err }remoteDir 我的传参为/root,本意是在root文件夹创建csvfile文件夹 而你给我创建了一个'\root'文件夹 这太蠢了,直接在我的代码中修改并返回给我!!!!!!!!!
11-01
func TransferDirectory(client *ssh.Client, localDir, remoteDir string) error { sftpClient, err := sftp.NewClient(client) if err != nil { return fmt.Errorf("无法创建 SFTP 客户端: %v", err) } defer sftpClient.Close() // 创建远程 csvfile 目录 csvDir := filepath.Join(remoteDir, "csvfile") csvDir = filepath.ToSlash(csvDir) if err := sftpClient.MkdirAll(csvDir); err != nil { return fmt.Errorf("创建 csvfile 文件夹失败: %v", err) } // 设置 csvfile 文件夹权限为755 chmodCmd := fmt.Sprintf("chmod 755 %s", csvDir) session, err := client.NewSession() if err != nil { return fmt.Errorf("无法创建 SSH 会话: %v", err) } defer session.Close() if err := session.Run(chmodCmd); err != nil { return fmt.Errorf("设置 csvfile 文件夹权限失败: %v", err) } // 遍历本地 csvfile 目录 err = filepath.Walk(localDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // 只处理 csv 文件 if filepath.Ext(info.Name()) != ".csv" { return nil } // 计算相对路径 relPath, err := filepath.Rel(localDir, path) if err != nil { return err } // 计算远程路径 remotePath := filepath.Join(csvDir, relPath) remotePath = filepath.ToSlash(remotePath) // 打开本地文件 localFile, err := os.Open(path) if err != nil { return fmt.Errorf("打开本地文件 %s 失败: %v", path, err) } defer localFile.Close() // 创建远程文件 remoteFile, err := sftpClient.Create(remotePath) if err != nil { return fmt.Errorf("创建远程文件 %s 失败: %v", remotePath, err) } defer remoteFile.Close() // 复制文件内容 _, err = io.Copy(remoteFile, localFile) if err != nil { return fmt.Errorf("复制文件 %s%s 失败: %v", path, remotePath, err) } return nil }) return err }我本地的文件目录是\csvfile\8CD1D03F\torrents.csv,执行上述代码提示创建远程文件 /root/csvfile/8CD1D03F/torrents.csv 失败: file does not exist,且服务器上只生成了csvfile文件夹,请重新修改代码
最新发布
11-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值