2012-03-02 15 views
6

Điều này nghe có vẻ ngu ngốc nhưng làm cách nào để xác định biến toàn cầu trong Go? const myglobalvariable = "Hi there!" không thực sự hoạt động ...Biến toàn cầu/Lấy đối số dòng lệnh và in nó

Tôi chỉ muốn lấy đối số dòng lệnh và sau đó tôi muốn in nó. Tôi làm điều này bằng đoạn mã này:

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

Vấn đề là nó chỉ in một dòng trống vì vậy tôi nghĩ về khai báo một biến toàn cầu sử dụng const myglobalvariable = "Hi there!" nhưng tôi chỉ nhận được lỗi cannot use flag.Args() (type []string) as type ideal string in assignment ... ... Tôi biết đây là một câu hỏi noob vì vậy tôi hy vọng bạn có thể giúp tôi ...

Trả lời

-5

Tại sao bạn cần một biến toàn cầu? Ví dụ:

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

Tôi nghĩ rằng câu trả lời này đã xuống bình chọn vì nó đã cho OP những gì họ cần, chứ không phải những gì họ yêu cầu :) –

25

Tôi thấy ít nhất hai câu hỏi ở đây, có thể là ba.

  1. Làm cách nào để bạn khai báo biến toàn cầu?
  2. Làm thế nào để bạn khai báo một hằng số toàn cầu?
  3. Làm cách nào để phân tích cú pháp tùy chọn dòng lệnh và đối số?

Tôi hy vọng mã bên dưới thể hiện điều này một cách hữu ích. Các gói cờ là một trong những gói đầu tiên tôi đã phải cắt răng của tôi trên Go. Vào thời điểm đó không rõ ràng, mặc dù tài liệu đang được cải thiện.

FYI, tại thời điểm viết bài này tôi đang sử dụng http://weekly.golang.org làm tài liệu tham khảo. Trang web chính quá xa xưa.

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

đẹp mã ví dụ – djhaskin987

0

Xem cách gofmt, godoc, và others xử lý điều tương tự.

+0

Đây là một câu trả lời thực sự lười biếng. Bạn thậm chí không liên kết đến một tập tin cụ thể mà là một repo với hàng ngàn tệp trong mỗi tệp. Ví dụ thế giới thực đang ở đây: https://github.com/golang/go/blob/master/src/crypto/dsa/dsa.go – anon58192932

18

Điều gần nhất với biến toàn cầu trong Go là một gói gói. Bạn xác định một cái như

var text string 

Đối số dòng lệnh, đang nằm trong biến gói, os.Args, đang chờ bạn truy cập chúng. Bạn thậm chí không cần gói cờ.

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 
    } 
} 
Các vấn đề liên quan