方法一
      
     
    
   
    
     
      /root/code/go/src/contoso.org/book/main.go
     
    
   
    
     
      package main
      import (
      
      “fmt”
      
      “os”
      
      “reflect”
      
      “strings”
      
      )
      func main() {
      
      
      PrintArgs1(os.Args)
      
      }
      
      //变参函数的定义方式
      
      func PrintArgs1(args …interface{}) {
      
      
      fmt.Println(args[0].([]string))
      
      fmt.Println(reflect.TypeOf(args[0]))
      
      for k, v := range args[0].([]string) {
      
      
      fmt.Println(k, ” =”, v, reflect.TypeOf(v))
      
      }
      
      fmt.Println(“========================================”)
      
      var myStr = (args[0].([]string))[1]    //直接点击调试运行,此行代码数组就越界了
      
      fmt.Println(“myStr =”, myStr, “myStr Type =”, reflect.TypeOf(myStr))
      
      ss := strings.Split(myStr, “,”)
      
      for k, v := range ss {
      
      
      fmt.Println(k, ” =”, v, reflect.TypeOf(v))
      
      }
      
      }
     
    
   
    
     
      
       
      
     
    
   
    
     
      
       提示,上面的代码写法没有任何错误,但不能直接点击调试运行,因为程序运行时必须传入
      
     
     
      参数值
     
    
   
    
     
      [root@contoso ~]#
     
    
    
     
      tree $GOPATH/src/contoso.org -L 3  ##查看项目目录结构
      
      /root/code/go/src/contoso.org
      
      ├── book
      
      ├── debug
      
      └── main.go
     
    
   
    
     
      [root@contoso ~]#
     
    
    
     
      cd $GOPATH && go install contoso.org/book && cd ~
      
     
    
    
     
      [root@contoso ~]#
     
    
    
     
      book 141,13,105,17,208
      
     
     
      
       [book 141,13,105,17,208]
       
       []string
       
       0  = book string
       
       1  = 141,13,105,17,208 string
       
       ========================================
       
       myStr = 141,13,105,17,208 myStr Type = string
       
       0  = 141 string
       
       1  = 13 string
       
       2  = 105 string
       
       3  = 17 string
       
       4  = 208 string
      
     
     
      
     
    
    
     
      [root@contoso ~]#
     
    
    
     
      
     
    
   
    
     
      
     
    
   
    
     
      方法二
     
    
   
    
     
      单步调试之前,设置好Args的初始化值列表,同样适合上面的范例,直接这样
     
    
    
     [root@contoso ~]#
    
    
     
      
       
        book 即可运行book
       
      
      
     
    
   
    
     
      
      
     
    
   
    
     
      launch.json:
      
     
    
   
    
     {
     
     
     “version”: “0.2.0”,
     
     “configurations”: [
     {
     
     
     “name”: “Launch”,
     
     “type”: “go”,
     
     “request”: “launch”,
     
     “mode”: “debug”,
     
     “remotePath”: “”,
     
     “port”: 2345,
     
     “host”: “127.0.0.1”,
     
     “program”: “${fileDirname}”,
     
     “env”: {},
     
     
      “args”: [“141″,”13″,”105″,”17″,”208”],
     
     
     “showLog”: true
     
     }
     
     ]
     
     }
    
    
     
      
     
    
   
    
     
      
      
     
    
   
    
     
      
      
     
    
   
    
     方法二的简写格式
     
    
   
    
     package main
     import (
     
     “fmt”
     
     “os”
     
     “reflect”
     
     )
     func main() {
     
     
     
      for _, arg := range os.Args[1:] {
      
      
      fmt.Println(“arg =”, arg, ” arg Type =”, reflect.TypeOf(arg))    // 可以把每个字符串参数转换成我们需要的类型
      
      }
     
     
     }
    
   
    
     调试控制台会输出以下信息:
     
    
   
    
     
      
       2017/07/02 14:52:02 server.go:73: Using API v1
       
       2017/07/02 14:52:02 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug 141 13 105 17 208]
       
       API server listening at: 127.0.0.1:2345
       
       2017/07/02 14:52:03 debugger.go:505: continuing
       
       arg = 141  arg Type = string
       
       arg = 13  arg Type = string
       
       arg = 105  arg Type = string
       
       arg = 17  arg Type = string
       
       arg = 208  arg Type = string
      
     
    
    
     
      
       
        
       
      
     
    
   
    
     
      
       
        方法三
       
      
     
    
   
    
     package main
     import (
     
     “fmt”
     
     “os”
     
     “reflect”
     
     “strings”
     
     )
     func main() {
     
     
     fmt.Println(strings.Join(os.Args[1:], ” “))
     
      
       // 传入的数据量很大,一种简单且高效的解决方案是使用strings包的Join函数
      
     
args := strings.Split(strings.Join(os.Args[1:], ” “), ” “)
     for _, arg := range args {
     
     
     fmt.Println(“arg =”, arg, ” arg Type =”, reflect.TypeOf(arg))
     
     }
     }
     
    
   
    
     
    
   
    
     调试控制台打印输出如下信息:
     
    
   
    
     
      2017/07/02 11:21:11 server.go:73: Using API v1
      
      2017/07/02 11:21:11 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug 141 13 105 17 208]
      
      API server listening at: 127.0.0.1:2345
      
      2017/07/02 11:21:12 debugger.go:505: continuing
      
      141 13 105 17 208
      
      
       arg = 141  arg Type = string
       
       arg = 13  arg Type = string
       
       arg = 105  arg Type = string
       
       arg = 17  arg Type = string
       
       arg = 208  arg Type = string
      
     
    
    
     
      
     
    
   
 
