2012-03-02 52 views
6

这听起来很蠢,但我怎么定义转到一个全局变量? const myglobalvariable = "Hi there!"真的没有工作...全局变量/ Get命令行参数,并打印

我只想获得命令行参数,然后我想打印它。我做这个使用此代码段:

package main 

import (
    "flag" 
    "fmt" 
) 

func main() { 
    gettext(); 
    fmt.Println(text) 
} 

func gettext() { 
    flag.Parse() 
    text := flag.Args() 
    if len(text) < 1 { 
     fmt.Println("Please give me some text!") 
    } 
} 

的问题是,它只是打印一个空行,所以我想过使用const myglobalvariable = "Hi there!"声明一个全局变量,但我只是得到错误cannot use flag.Args() (type []string) as type ideal string in assignment ... ......我知道这是一个noob问题,所以我希望你能帮助我...

回答

-5

为什么你需要一个全局变量?例如,

package main 

import (
    "flag" 
    "fmt" 
) 

func main() { 
    text := gettext() 
    fmt.Println(text) 
} 

func gettext() []string { 
    flag.Parse() 
    text := flag.Args() 
    if len(text) < 1 { 
     fmt.Println("Please give me some text!") 
    } 
    return text 
} 
+0

我觉得这个答案下投票,因为它给了他们所需要的任择议定书,不是他们问:) – 2017-12-06 09:20:26

25

我在这里看到至少两个问题,也许是三个。

  1. 如何声明一个全局变量?
  2. 你如何声明一个全局常量?
  3. 如何解析命令行选项和参数?

我希望下面的代码以有益的方式证明了这一点。国旗包是我在Go上削减牙齿的第一批包裹之一。当时并不明显,尽管文档正在改进。

仅供参考,在撰写本文时,我使用http://weekly.golang.org作为参考。主要网站太过时了。

package main 

import (
    "flag" 
    "fmt" 
    "os" 
) 

//This is how you declare a global variable 
var someOption bool 

//This is how you declare a global constant 
const usageMsg string = "goprog [-someoption] args\n" 

func main() { 
    flag.BoolVar(&someOption, "someOption", false, "Run with someOption") 
    //Setting Usage will cause usage to be executed if options are provided 
    //that were never defined, e.g. "goprog -someOption -foo" 
    flag.Usage = usage 
    flag.Parse() 
    if someOption { 
     fmt.Printf("someOption was set\n") 
    } 
    //If there are other required command line arguments, that are not 
    //options, they will now be available to parse manually. flag does 
    //not do this part for you. 
    for _, v := range flag.Args() { 
     fmt.Printf("%+v\n", v) 
    } 

    //Calling this program as "./goprog -someOption dog cat goldfish" 
    //outputs 
    //someOption was set 
    //dog 
    //cat 
    //goldfish 
} 

func usage() { 
    fmt.Printf(usageMsg) 
    flag.PrintDefaults() 
    os.Exit(1) 
}
+1

漂亮的代码示例 – djhaskin987 2015-02-20 20:32:29

0

了解如何gofmtgodoc,并且others处理同样的事情。

+0

这是一个非常懒惰的答案。你甚至没有链接到一个特定的文件,而是一个有数千个文件的回购站。真实世界的例子在这里:https://github.com/golang/go/blob/master/src/crypto/dsa/dsa.go – anon58192932 2016-04-21 16:29:09

18

Go中最接近全局变量的是变量。你定义一个像

var text string 

尽管,命令行参数已经坐在一个包变量os.Args,等待你去访问它们。你甚至不需要旗帜包。

package main 

import (
    "fmt" 
    "os" 
) 

func main() { 
    if len(os.Args) < 2 {  // (program name is os.Arg[0]) 
     fmt.Println("Please give me some text!") 
    } else { 
     fmt.Println(os.Args[1:]) // print all args 
    } 
}