Golang小脚本疑似语法错误导致无法运行

Golang小脚本疑似语法错误导致无法运行 我写了一个小脚本,因为我的女朋友最近转用Linux系统,我想让她能方便地使用youtube-dl。不过在编写这个Go脚本时遇到了障碍,可能只是我太笨了,因为代码完全没反应。我怀疑问题出在尝试将name变量添加到命令时操作不当。

package main 

import ( "os"
 "os/exec"
 "log" 
"http://github.com/tcnksm/go-input"
 )

     func main() {
     ui := &input.UI{
     Writer: os.Stdout, 
     Reader: os.Stdin, 
    } 
    query := "Please paste the link of the playlist" 
    name, err := ui.Ask(query, &input.Options{ 
    Required: true,
     }) if err != nil {
     log.Fatal(err)} 
    exec.Command("youtube-dl -v -x -i --yes-playlist " + name ) 
    }

更多关于Golang小脚本疑似语法错误导致无法运行的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

实际上我刚才粘贴错了,换行符是存在的,而且编译器实际上没有报错,代码可以运行,只是没有任何效果

更多关于Golang小脚本疑似语法错误导致无法运行的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


假设没有语法错误(甚至包括HTTP相关的错误),那么你的程序(不是脚本)确实创建了一个命令,但从未执行 Run() 它。

  1. 导入路径不需要模式(schema),因此只需写 github.com/tcnksm/go-input
  2. 有几处 & 你只需要写 &
  3. if err != nil … 之前缺少一个换行

所有这些在阅读编译器输出的错误信息时都有提示。

func main() {
    fmt.Println("hello world")
}

这可能会有所帮助:

package main 

import (
        "os"
        "os/exec"
        "log" 
        "github.com/tcnksm/go-input"
)

func main() {
        ui := &input.UI {
                Writer: os.Stdout, 
                Reader: os.Stdin, 
        } 
        query := "Please paste the link of the playlist" 
        name, err := ui.Ask(query, &input.Options{ Required: true, })
        if err != nil {
                log.Fatal(err)
        }

        command_name := "youtube-dl"

        command_args := []string {
                "-v",
                "-x",
                "-i",
                "--yes-playlist",
                name,
                }

        cmd := exec.Command(command_name, command_args...) 
        err = cmd.Run()
        if err != nil { log.Printf("err = %v\n",err) }
}

我使用你提供的参数尝试了它,得到了一个只有音频没有画面的视频。如果出现这种情况,请尝试为 youtube-dl 命令使用不同的参数。

你的代码中存在几个语法和逻辑问题,导致程序无法正常运行。以下是修正后的版本:

package main

import (
    "log"
    "os"
    "os/exec"
    
    "github.com/tcnksm/go-input"
)

func main() {
    ui := &input.UI{
        Writer: os.Stdout,
        Reader: os.Stdin,
    }
    
    query := "Please paste the link of the playlist"
    name, err := ui.Ask(query, &input.Options{
        Required: true,
    })
    
    if err != nil {
        log.Fatal(err)
    }
    
    // 构建命令并执行
    cmd := exec.Command("youtube-dl", "-v", "-x", "-i", "--yes-playlist", name)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    
    if err := cmd.Run(); err != nil {
        log.Fatal("Failed to execute command:", err)
    }
}

主要问题修正:

  1. import语句格式错误:删除了无效的URL格式导入,使用正确的包导入语法
  2. 命令执行逻辑缺失exec.Command()只是创建命令对象,需要调用Run()方法执行
  3. 参数传递方式错误:应该将命令和参数分开传递,而不是拼接成单个字符串
  4. 输出处理缺失:添加了标准输出和错误输出的重定向

如果你的系统没有安装youtube-dl,程序会报错。确保已通过包管理器安装:

# Ubuntu/Debian
sudo apt install youtube-dl

# 或者使用pip
pip install youtube-dl

修正后的代码会正确提示用户输入播放列表链接,然后执行相应的youtube-dl命令。

回到顶部