我想用一些标志同时运行两个函数,但是下面的golang脚本正在工作,如果它们不调用标志go run ping.go ie,它们将使用默认值。
下面的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'结果就会被破坏。
**关于上述代码**
该脚本将运行两个功能,都是点击不同的网站,同时使用同步。
不要感到困惑,这里的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发布于 2022-04-27 15:55:21
不应将标志arg语句单独放置,将其放在单个func中,调用flag.Parse()一次,然后将参数传递给pingone()和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://stackoverflow.com/questions/72029314
复制相似问题