您好,欢迎访问沃航(武汉)科技有限公司官方网站
go语言获取命令行参数
2019-09-25 20:49:06

上一篇文章有教大家go语言的反向代理服务,但是由于程序中几个重要参数都是固定的,因此如果要调整,就必须重新编译才行,如果能通过命令行参数动态指定这些参数,就能一个可执行文件完成不同配置了。

go语言获取命令行参数的方式如下:

package main

import (
    "fmt"
    "os"
)

func main() {
    args := os.Args
    argslen := len (args)
    for i := 0 ; i < argslen ; i++ {
        fmt.Println(args[i])
    }
}

大家可以看到,命令行参数的获取依赖os包,获取得到后是个切片。

结合上一篇的反向代理代码,可修改为:

package main

import (
    "fmt"
    "net/http"
    "net/http/httputil"
    "net/url"
    "os"
)

var host string = "localhost"
var remoteurl string

func ServeHTTP(res http.ResponseWriter, req *http.Request) {
    fmt.Println (req.URL)
    remote, err := url.Parse(remoteurl)
    if err != nil {
        panic(err)
    }
    proxy := httputil.NewSingleHostReverseProxy(remote)
    req.Host = host
    proxy.ServeHTTP(res, req)
}

func main() {
    port := "32236"
    protocol := "http://"
    args := os.Args
    argslen := len (args)
    for i := 0 ; i < argslen ; i++ {
        if args[i] == "-h" {
            host = args[i+1]
        } else if args[i] == "-p" {
            port = args[i+1]
        } else if args[i] == "-s" {
            protocol = "https://"
        }
    }
    remoteurl = protocol + host
    fmt.Println ("local port:", port)
    fmt.Println ("remoteurl:", remoteurl)
    http.HandleFunc("/", ServeHTTP)
    err := http.ListenAndServe(":" + port, nil);
    if err != nil {
        panic(err)
    }
}

修改成这样后,软件就可以接收几个参数了。参数如下:

-p 指定本地端口

-h 指定对方域名

-s 使用https协议。


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn