亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Golang 中借助標志使用隨機參數

如何在 Golang 中借助標志使用隨機參數

Go
吃雞游戲 2023-04-24 16:22:54
我希望來自控制臺的輸入是匿名參數。我目前的執行方式是./app -infc=eth0 -ip=192.168.0.1我不想要這個,因為我需要這個應用程序是通用的,這樣我也可以將它用于其他目的。我希望 CLI 是這樣的./app -firstparam={{infc},eth0} -secondparam={{ip},192.168.0.1}所以這基本上應該通過讀取參數中的兩列來工作。所以它應該將參數解析為內部鍵值對需要有關如何將每個參數存儲為鍵值對并稍后單獨使用它們的幫助
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

這是一個準系統示例,讓您了解如何處理 os.Args


$ go run main.go --foo asdf --bar xxx --baz ccc

map[--foo:asdf --bar:xxx --baz:ccc]

jsandrew-Mac:osarg jsandrew$ cat main.go

package main


import (

    "fmt"

    "os"

)


func manyRandomArg() map[string]string {

    rv := make(map[string]string)

    for ix, x := range os.Args {

        if x[:2] == "--" {

            rv[x] = os.Args[ix+1]

        }

    }

    return rv

}


func main() {

    fmt.Printf("%v\n", manyRandomArg())

}


查看完整回答
反對 回復 2023-04-24
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

package main


import (

    "fmt"

    "io/ioutil"

    "log"

    "os"

    "regexp"

    "strings"

)


var key0, key1, key2, key3, key4, filename string

var fileext = regexp.MustCompile(`([a-z]+)\.yaml`)


func manyRandomArg() map[string]string {

    rv := make(map[string]string)

    for ix, x := range os.Args {

        if x[:2] == "--" {

            rv[x] = os.Args[ix+1]

        }

    }

    return rv

}


func main() {

    fmt.Printf("\n%v\n", manyRandomArg())

    readargs()

}

func readargs() {


    rv := manyRandomArg()

    keys := make([]string, 0, len(rv))

    for key, _ := range rv {

        keys = append(keys, key)

    }

    // Convert map to slice of values.

    values := []string{}

    for _, value := range rv {

        values = append(values, value)

    }


    for keys, values := range rv {

        fmt.Printf("key[%s] value[%s]\n", keys, values)

    }

    if fileext.MatchString(values[0]) {

        fmt.Printf("Value %s\n", values[0])

        filename = values[0]

    } else if fileext.MatchString(values[1]) {

        fmt.Printf("Value %s\n", values[1])

        filename = values[1]

    } else if fileext.MatchString(values[2]) {

        fmt.Printf("Value %s\n", values[2])

        filename = values[2]

    } else if fileext.MatchString(values[3]) {

        fmt.Printf("Value %s\n", values[3])

        filename = values[3]

    } else if fileext.MatchString(values[4]) {

        fmt.Printf("Value %s\n", values[4])

        filename = values[4]

    } else {

        log.Fatal("index 4 fail")

        os.Exit(1)

    }


    b, err := ioutil.ReadFile(filename) // just pass the file name

    if err != nil {

        fmt.Print(err)

    }

    str := string(b) // convert content to a 'string'

    key0 = trimLeftChars(keys[0], 2)

    key1 = trimLeftChars(keys[1], 2)

    key2 = trimLeftChars(keys[2], 2)

    key3 = trimLeftChars(keys[3], 2)

    key4 = trimLeftChars(keys[4], 2)


    // Create replacer with pairs as arguments.

    r := strings.NewReplacer(key0, values[0], key1, values[1], key2, values[2], key3, values[3], key4, values[4])


    // Replace all pairs.

    result := r.Replace(str)

    fmt.Println(result)


    newContents := []byte(result)

    err = ioutil.WriteFile("new3.yaml", newContents, 0664)

    if err != nil {

        panic(err)

    }

}

func trimLeftChars(s string, n int) string {

    m := 0

    for i := range s {

        if m >= n {

            return s[i:]

        }

        m++

    }

    return s[:0]

}


查看完整回答
反對 回復 2023-04-24
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號