13397158231   jevian_ma@worldflying.cn

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协议。


文章作者:沃航科技

优秀产品推荐:可编程网络IO控制器

上一篇:go语言开发反向代理服务器

下一篇:可在windows下使用---基于go的http代理服务器goproxy

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务