2012-03-02 51 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 
    } 
}