You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go程序如何循环提示用户输入有效目录并解决空指针panic问题

问题根因

你的panic是空指针异常导致的,触发点在x.IsDir()这行:

你用x, _ := os.Stat(text)直接忽略了错误返回值,当用户输入的路径不存在、无权限访问时,os.Stat返回的第一个值x会是nil,此时调用nil结构体的IsDir()方法就会触发空指针panic。
此外你的原有逻辑就算拿到有效目录也不会退出循环,会持续等待用户输入,不符合需求。

修复要点

  • 必须判断os.Stat的返回错误,排除路径不存在、无权限等异常场景
  • 输入有效目录后主动跳出循环,不需要继续等待输入
  • 每次输入无效后重新提示用户输入,符合交互逻辑
  • 增加bufio.Scanner自身的错误判断,处理终端输入异常的情况

可运行完整代码

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	var targetDir string
	scanner := bufio.NewScanner(os.Stdin)

	fmt.Println("What file path would you like to search?")
	for scanner.Scan() {
		inputPath := scanner.Text()
		fileInfo, err := os.Stat(inputPath)
		if err != nil {
			fmt.Printf("路径无效: %v,请重新输入:\n", err)
			continue
		}
		if !fileInfo.IsDir() {
			fmt.Println("输入的路径不是目录,请重新输入:")
			continue
		}
		// 走到此处说明拿到有效目录
		targetDir = inputPath
		fmt.Println("Cool this is a directory")
		break
	}

	// 处理scanner本身的输入错误
	if err := scanner.Err(); err != nil {
		fmt.Printf("读取输入失败: %v\n", err)
		return
	}

	// 后续可直接使用targetDir执行对应操作
	fmt.Printf("即将处理目录: %s\n", targetDir)
}

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:45:09