- 46
- 0
问题描述
如题,控制台传值时,通过go run直接运行的时候可以完全获取到传入的命令行参数值,但是通过go build构建成应用之后每行仅能传入1024个字符,多出的部分会被截取掉
问题出现的环境背景及自己尝试过哪些方法
尝试过更改接收方式,NewScanner(),NewReader(), NewReaderSize()均用了无果,且百度谷歌无相关解决方案
相关代码
fmt.Println("请输入你的cookie信息:")
reader := bufio.NewReaderSize(os.Stdin, 4 * 1024)
for {
cookieValue, err := reader.ReadString('\n')
if err != nil {
fmt.Println("参数传入错误,请重试:", err)
}
if cookieValue == "\n" {
log.Println("参数不能为空")
} else {
fmt.Println(cookieValue)
break
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
求排查原因,使stdin输入参数时可突破单行1024字符的限制
- 共 0 条
- 全部回答
-
脑震荡失忆 普通会员 1楼
在Go语言中,控制台输入(stdin)主要用于接收用户的输入。然而,如果你在控制台传参,可能会遇到一些问题。下面是一些可能遇到的问题和解决方法:
- 未定义的变量:如果你在控制台传参时,传入了一个未定义的变量,那么这个变量在运行时是未定义的。你可以使用
nil来代替,表示参数是空的。例如:
go var x int fmt.Scanln(&x)- 类型转换错误:如果你在控制台传参时,传入的参数类型和预期的参数类型不匹配,那么在运行时可能会发生类型转换错误。你可以使用
type assertion来确保参数类型匹配。例如:
go var x int fmt.Scanln(&x) if x != 5 { fmt.Println("Error: x must be 5") return }- 输入流错误:如果你在控制台传参时,传入的参数是一个输入流,但是这个输入流没有在程序运行时被关闭,那么在运行时可能会出现缓冲区溢出或缓冲区错误。你可以使用
close函数来关闭输入流。例如:
go var x int io.Copy(&x, os.Stdin)- 错误的输入格式:如果你在控制台传参时,传入的参数是一个非空字符串,但是这个字符串格式不符合程序的预期,那么在运行时可能会出现错误。你可以使用
fmt.Sprintf函数来格式化字符串。例如:
go var x string fmt.Scanln(&x) fmt.Println("%s", x)- 压缩输出:如果你在控制台传参时,使用了
fmt.Println或fmt.PrintlnW等函数进行输出,但是这些函数不会压缩输出,而是直接打印到控制台。你可以使用strings.Repeat函数来实现输出的压缩。例如:
go var x int fmt.Println(strings.Repeat("a", x))总的来说,你需要确保传入的参数是合法的,并且在运行时能够正确地进行类型转换和输出。
- 未定义的变量:如果你在控制台传参时,传入了一个未定义的变量,那么这个变量在运行时是未定义的。你可以使用
-
队友最浪 普通会员 2楼
在Go语言中,控制台输入(stdin)主要用于接收用户的输入。然而,如果你在控制台传参,可能会遇到一些问题。下面是一些可能遇到的问题和解决方法:
- 未定义的变量:如果你在控制台传参时,传入了一个未定义的变量,那么这个变量在运行时是未定义的。你可以使用
nil来代替,表示参数是空的。例如:
go var x int fmt.Scanln(&x)- 类型转换错误:如果你在控制台传参时,传入的参数类型和预期的参数类型不匹配,那么在运行时可能会发生类型转换错误。你可以使用
type assertion来确保参数类型匹配。例如:
go var x int fmt.Scanln(&x) if x != 5 { fmt.Println("Error: x must be 5") return }- 输入流错误:如果你在控制台传参时,传入的参数是一个输入流,但是这个输入流没有在程序运行时被关闭,那么在运行时可能会出现缓冲区溢出或缓冲区错误。你可以使用
close函数来关闭输入流。例如:
go var x int io.Copy(&x, os.Stdin)- 错误的输入格式:如果你在控制台传参时,传入的参数是一个非空字符串,但是这个字符串格式不符合程序的预期,那么在运行时可能会出现错误。你可以使用
fmt.Sprintf函数来格式化字符串。例如:
go var x string fmt.Scanln(&x) fmt.Println("%s", x)- 压缩输出:如果你在控制台传参时,使用了
fmt.Println或fmt.PrintlnW等函数进行输出,但是这些函数不会压缩输出,而是直接打印到控制台。你可以使用strings.Repeat函数来实现输出的压缩。例如:
go var x int fmt.Println(strings.Repeat("a", x))总的来说,你需要确保传入的参数是合法的,并且在运行时能够正确地进行类型转换和输出。
- 未定义的变量:如果你在控制台传参时,传入了一个未定义的变量,那么这个变量在运行时是未定义的。你可以使用
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
