第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang 標志被解釋為第一個 os.Args 參數(shù)

Golang 標志被解釋為第一個 os.Args 參數(shù)

Go
慕標琳琳 2021-06-30 05:09:51
我想像這樣運行我的程序:go run launch.go http://example.com --m=2 --strat=par“ http://example.com ”被解釋為第一個命令行參數(shù),這沒問題,但之后不會解析標志并保持默認值。如果我這樣說:go run launch.go --m=2 --strat=par http://example.com然后 "--m=2" 被解釋為第一個參數(shù)(應該是 URL)。我也可以完全刪除 os.Args,但是我將只有可選標志,并且我希望其中一個(URL)是強制性的。這是我的代碼:package mainimport (    "fmt"    "webcrawler/crawler"    "webcrawler/model"    "webcrawler/urlutils"    "os"    "flag")func main() {    if len(os.Args) < 2 {        log.Fatal("Url must be provided as first argument")    }    strategy := flag.String("strat", "par", "par for parallel OR seq for sequential crawling strategy")    routineMultiplier := flag.Int("m", 1, "Goroutine multiplier. Default 1x logical CPUs. Only works in parallel strategy")    page := model.NewBasePage(os.Args[1])    urlutils.BASE_URL = os.Args[1]    flag.Parse()    pages := crawler.Crawl(&page, *strategy, *routineMultiplier)    fmt.Printf("Crawled: %d\n", len(pages))}我很確定這應該是可能的,但我不知道如何。編輯:感謝 justinas 的 flag.Args() 提示。我現(xiàn)在像這樣調整它并且它有效:...flag.Parse()args := flag.Args()    if len(args) != 1 {        log.Fatal("Only one argument (URL) allowed.")    }page := model.NewBasePage(args[0])...
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

os.Argsflag軟件包一無所知,并且包含所有命令行參數(shù)。嘗試flag.Args()flag.Parse()當然是在調用之后)。


查看完整回答
反對 回復 2021-07-05
?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

這也讓我絆倒了,因為我flag.String/flag.Int64/etc在我的應用程序中調用了幾個地方,我不想到處傳遞一個新flag.FlagSet的。


// If a commandline app works like this: ./app subcommand -flag -flag2

// `flag.Parse` won't parse anything after `subcommand`.

// To still be able to use `flag.String/flag.Int64` etc without creating

// a new `flag.FlagSet`, we need this hack to find the first arg that has a dash

// so we know when to start parsing

firstArgWithDash := 1

for i := 1; i < len(os.Args); i++ {

    firstArgWithDash = i


    if len(os.Args[i]) > 0 && os.Args[i][0] == '-' {

        break

    }

}


flag.CommandLine.Parse(os.Args[firstArgWithDash:])

我這樣做的原因是因為無論如何flag.Parse只是flag.CommandLine.Parse(os.Args[1:])在幕后打電話。


查看完整回答
反對 回復 2021-07-05
  • 3 回答
  • 0 關注
  • 310 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號