我想使用一些標志同時運行兩個函式,但是如果它們不呼叫標志,則下面的 golang 腳本正在作業,go run ping.go即,它們將使用默認值。
ping.go 檔案如下
package main
import (
// "io/ioutil"
// "log"
"flag"
"fmt"
"net/http"
"sync"
"time"
)
func pingone() {
websiteone := flag.String("websiteone", "adminone", "Zdefault website")
flag.Parse()
// using/printing flags to avoid error
fmt.Println("website:", *websiteone)
eurl := "https://thesiteone.com/"
happ := "/subpage"
for {
resp, err := http.Get(eurl *websiteone happ)
if err != nil {
continue
}
fmt.Println(resp)
time.Sleep(2 * time.Second)
}
}
func pingtwo() {
websitetwo := flag.String("websitetwo", "admintwo", "Zdefault website")
flag.Parse()
// using/printing flags to avoid error
fmt.Println("website:", *websitetwo)
eurltwo := "https://thesitetwo.com/"
happtwo := "/subpage"
for {
resp, err := http.Get(eurltwo *websitetwo happtwo)
if err != nil {
continue
}
fmt.Println(resp)
time.Sleep(2 * time.Second)
}
}
func main() {
var wg sync.WaitGroup
fmt.Printf("Both pingone and pingtwo started\n")
wg.Add(2)
go pingone()
go pingtwo()
wg.Wait()
fmt.Printf("both pingone and pingtwo have finished\n")
}
但是如果我們同時呼叫這兩個標志,
go run ping.go --websitetwo='secondsuburl' --websiteone='firstsuburl'
它們就會被破壞
**關于上面的代碼**
該腳本將運行兩個函式,它們都使用同步同時 ping 不同的網站。
不要混淆,這里的 url 被分成三部分/字串:第二部分是定義標志的地方。
下面的輸出
root@localhost:~# go run ping.go --websiteone=admin1 --websitetwo=admin2
Both pingone and pingtwo started
flag provided but not defined: -websiteone
Usage of /tmp/go-build010683275/b001/exe/ping:
-websiteone string
Zdefault website (default "adminone")
website: admin1
-websitetwo string
Zdefault website (default "admintwo")
exit status 2
uj5u.com熱心網友回復:
您不應該將標志 arg 陳述句分開放置,將它們放入單個 func 中,呼叫flag.Parse()一次,然后將引數傳遞給pingone()and pingtwo()。
我在下面調整了您的代碼,它應該可以解決您的問題
package main
import (
"flag"
"fmt"
"net/http"
"sync"
"time"
)
func pingone(websiteone *string) {
fmt.Println("website:", *websiteone)
eurl := "https://thesiteone.com/"
happ := "/subpage"
for {
resp, err := http.Get(eurl *websiteone happ)
if err != nil {
continue
}
fmt.Println(resp)
time.Sleep(2 * time.Second)
}
}
func pingtwo(websitetwo *string) {
fmt.Println("website:", *websitetwo)
eurltwo := "https://thesitetwo.com/"
happtwo := "/subpage"
for {
resp, err := http.Get(eurltwo *websitetwo happtwo)
if err != nil {
continue
}
fmt.Println(resp)
time.Sleep(2 * time.Second)
}
}
func main() {
websiteone := flag.String("websiteone", "adminone", "Zdefault website")
websitetwo := flag.String("websitetwo", "admintwo", "Zdefault website")
flag.Parse()
var wg sync.WaitGroup
fmt.Printf("Both pingone and pingtwo started\n")
wg.Add(2)
go pingone(websiteone)
go pingtwo(websitetwo)
wg.Wait()
fmt.Printf("both pingone and pingtwo have finished\n")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466887.html
上一篇:Golang泛型
