我想在Golang中创建一个外部函数用于显示使用情况,但我不知道如何调用flag变量。这是我的实际代码:
package main
import (
"flag"
"fmt"
"os"
)
func Usage() {
if ArgSend {
fmt.Printf("Usage: SEND")
flag.PrintDefaults()
os.Exit(0)
} else if ArgTest {
fmt.Printf("Usage: -test")
flag.PrintDefaults()
os.Exit(0)
} else if ArgMacro {
fmt.Printf("Usage: -macro")
os.Exit(0)
} else {
fmt.Printf("Usage of: <-test|-send|-macro>\n")
os.Exit(0)
}
}
func main() {
//defaults variables
ArgTest, ArgSend, ArgMacro := false, false, false
// Args parse
flag.BoolVar(&ArgTest, "-test", false, "run test mode")
flag.BoolVar(&ArgSend, "-send", false, "run send mode")
flag.BoolVar(&ArgMacro, "-macro", false, "run macro mode")
flag.Parse()
Usage()
}
返回这个错误:
F:\dev\GoLang\gitlab\EasySend\tmp>go run stackoverflow.go -test
# command-line-arguments
.\stackoverflow.go:10:5: undefined: ArgSend
.\stackoverflow.go:15:12: undefined: ArgTest
.\stackoverflow.go:20:12: undefined: ArgMacro
如果 ArgSend 是真/假,我如何检查标志解析?
最佳答案
您的示例中有几处错误:
这里有一个很好的例子:golang flags example你应该检查godocs on flags特别是对于默认行为和自定义使用函数,如果您在修改示例时遇到问题,请在此处再次询问
更新: 抱歉,正如彼得在评论中指出的那样,我的回答有点困惑和不正确。
澄清一下,在“golang 标志示例”链接中提供的示例中,使用了给定的 flag.Bool。使用 flag.Bool 时返回一个指针。
在您使用 flag.BoolVar 的问题中,它允许您引用 bool 值。您在问题中使用 flag.BoolVar 实际上是正确的。
因此,您需要做的就是解决范围界定问题,并不是很清楚您要对您的用法做什么,但这里有一个工作示例应该可以说明:
注意:在这个例子中,标志变量可以保留在 main 中,因为它们在 Usage 函数中不是必需的
package main
import (
"flag"
"fmt"
"os"
)
func Usage() {
// custom usage (help) output here if needed
fmt.Println("")
fmt.Println("Application Flags:")
flag.PrintDefaults()
fmt.Println("")
}
var ArgTest, ArgSend, ArgMacro bool
func main() {
// Args parse
flag.BoolVar(&ArgTest, "test", false, "run test mode")
flag.BoolVar(&ArgSend, "send", false, "run send mode")
flag.BoolVar(&ArgMacro, "macro", false, "run macro mode")
flag.Parse()
// assign custom usage function (will be shown by default if -h or --help flag is passed)
flag.Usage = Usage
// if no flags print usage (not default behaviour)
if len(os.Args) == 1 {
Usage()
}
fmt.Printf("ArgTest val: %t\n", ArgTest)
fmt.Printf("ArgSend val: %t\n", ArgSend)
fmt.Printf("ArgMacro val: %t\n", ArgMacro)
}
关于戈朗 : command-line-arguments undefined: variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381817/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在寻找一种匹配多行Parslet的方法。代码如下所示:rule(:line){(match('$').absent?>>any).repeat>>match('$')}rule(:lines){line.repeat}但是,lines将始终以无限循环结束,这是因为match('$')将无休止地重复以匹配字符串的结尾。是否可以匹配可以为空的多行?irb(main)>lines.parse($stdin.read)Thisisamultilinestring^D应该匹配成功。我错过了什么吗?我还尝试了(match('$').absent?>>any.maybe).repeat(1)>>
我有以下代码,它下载一个文件,然后将文件的内容读入一个变量。使用该变量,它执行一个命令。这个配方不会收敛,因为/root/foo在编译阶段不存在。我可以通过多个聚合和一个来解决这个问题ifFile.exist但我想用一个收敛来完成它。关于如何做到这一点有什么想法吗?execute'download_joiner'docommand"awss3cps3://bucket/foo/root/foo"not_if{::File.exist?('/root/foo')}endpassword=::File.read('/root/foo').chompexecute'join_domain'd
我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot
我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co
例如,:符号-我正在尝试弄清楚:的含义,以及它与@的区别也没有任何符号。如果有真正有用的指南! 最佳答案 它是一个符号,是一种Ruby语言结构。符号类似于字符串,但thisblogpost解释细节。@表示类的实例变量:它基本上是一个在类实例的所有方法之间共享的变量。它与:无关。 关于ruby-:meaninrailsbeforeavariablename?是什么,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
作为RubyonRails新手,我明白“@”和“:”引用有不同的含义。我看到了thispost在SO中,其中描述了一些差异。@表示实例变量(例如@my_selection):表示别名(例如:my_selection)我遇到了一个情况,我有一个标准的MVC页面,类似于我的网络应用程序中的所有其他表单/页面。html.erb片段route.rb片段resources:my_selections当我尝试访问此页面时,出现此错误:NoMethodErrorinselections#createShowingC:/somedir/myapp/app/views/my_selections/ind
我有一个使用twitterbootstrap和sass的Rails元素。scss文件结构化到文件夹中,所以我有更好的概述。现在我想为包含我的颜色等的全局变量定义一个文件,并将这些值传递给其他文件,这样我就有更少的冗余代码。虽然所有代码都已正确导入和应用,变量不起作用。这是当前的设置:样式表/application.css.scss/**=require_self*=require_tree*//*stylesheets/||–base/||–_reset.scss#Reset/normalize||–_typography.scss#Typographyrules||–componen
@scores_raw.eachdo|score_raw|#belowiscodeiftimewasbeingsentinmillisecondshh=((score_raw.score.to_i)/100)/3600mm=(hh-hh.to_i)*60ss=(mm-mm.to_i)*60crumbs=[hh,mm,ss]sum=crumbs.first.to_i*3600+crumbs[1].to_i*60+crumbs.last.to_i@scoressum,:hms=>hh.round.to_s+":"+mm.round.to_s+":"+ss.round.to_s}@score