Global variables 全局变量/Get命令行参数并打印

Global variables 全局变量/Get命令行参数并打印,global-variables,go,Global Variables,Go,这听起来可能很愚蠢,但如何在Go中定义全局变量const myglobalvariable=“你好!”实际上不起作用 我只想得到命令行参数,然后打印它。我使用以下代码段执行此操作: package main import ( "flag" "fmt" ) func main() { gettext(); fmt.Println(text) } func gettext() { flag.Parse() text := flag.Args()

这听起来可能很愚蠢,但如何在Go中定义全局变量
const myglobalvariable=“你好!”
实际上不起作用

我只想得到命令行参数,然后打印它。我使用以下代码段执行此操作:

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!")
    }
}
主程序包
进口(
“旗帜”
“fmt”
)
func main(){
gettext();
fmt.Println(文本)
}
func gettext(){
flag.Parse()
text:=flag.Args()
如果len(文本)<1{
Println(“请给我一些文字!”)
}
}
问题是它只是打印了一个空行,所以我考虑使用
const myglobalvariable=“Hi there!”
声明一个全局变量,但我得到的错误是
无法使用flag.Args()(type[]string)作为赋值中的类型理想字符串
。。。
…我知道这是一个noob问题,所以我希望您能帮助我…

为什么需要全局变量?比如说,

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
}
主程序包
进口(
“旗帜”
“fmt”
)
func main(){
text:=gettext()
fmt.Println(文本)
}
func gettext()[]字符串{
flag.Parse()
text:=flag.Args()
如果len(文本)<1{
Println(“请给我一些文字!”)
}
返回文本
}

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

  • 如何声明全局变量
  • 如何声明全局常量
  • 如何解析命令行选项和参数
  • 我希望下面的代码以一种有用的方式演示了这一点。旗帜包裹是我在围棋中第一批不得不切齿的包裹之一。当时这并不明显,尽管文档正在改进

    仅供参考,在撰写本文时,我将其用作参考。主站点太过时了

    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)
    }

    查看如何处理相同的问题。

    在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
        }
    }
    
    主程序包
    进口(
    “fmt”
    “操作系统”
    )
    func main(){
    如果len(os.Args)<2{//(程序名为os.Arg[0])
    Println(“请给我一些文字!”)
    }否则{
    fmt.Println(os.Args[1:])//打印所有Args
    }
    }
    
    这是一个非常懒惰的答案。你甚至没有链接到一个特定的文件,而是一个包含数千个文件的回购协议。现实世界的例子就在这里:我认为这个答案被否决了,因为它给了OP他们需要的,而不是他们要求的:)