go - 在golang中迭代多个返回
问题描述
我正在尝试从包含域(未知数量)的文本文件中获取输入,然后将每个域用作参数并获取它们的服务器类型。正如预期的那样,这只返回最后一个域。如何迭代多个返回值?下面是代码。// 测试包main
import (
"bufio"
"time"
"os"
"fmt"
"net/http"
//"github.com/gocolly/colly"
)
var Domain string
var Target string
func main() {
Domain := DomainGrab()
Target := BannerGrab(Domain)
//CheckDB if not listed then add else skip
//RiskDB
//Email
fmt.Println(Domain)
fmt.Println(Target)
}
func BannerGrab(s string) string {
client := &http.Client{}
req, err := http.NewRequest("GET", s, nil)
if err != nil {
log.Fatalln(err)
}
req.Header.Set("User-Agent", "Authac/0.1")
resp, _ := client.Do(req)
serverEntry := resp.Header.Get("Server")
return serverEntry
}
func DomainGrab() string {
//c := colly.NewCollector()
// Open the file.
f, _ := os.Open("domains.txt")
defer f.Close()
// Create a new Scanner for the file.
scanner := bufio.NewScanner(f)
// Loop over all lines in the file and print them.
for scanner.Scan() {
line := scanner.Text()
time.Sleep(2 * time.Second)
//fmt.Println(line)
return line
}
return Domain
}
解决方案
如果我理解您的问题,您想阅读该文件,以某种方式检测该文件已被修改,并有一种方法可以将这些修改发送到客户端代码。
这不是文件的工作方式。
你有两个选择:
使用某些特定于操作系统的 API 监听文件更改 - https://www.linuxjournal.com/content/linux-filesystem-events-inotify
使用无限循环读取文件。读取文件一次。将副本保存到内存中。在循环中一次又一次地读取同一个文件,直到新文件不同于副本并计算增量。
检查是否可以使用push
而不是pull
获取新域。控制文件中域名的系统是否有可能直接将数据推送给您?
如果loop
是唯一可能的选项,请在文件读取之间设置一些暂停时间以减少系统负载。
当您设法获得新域并需要同时处理它们时,使用@dave建议的通道。
推荐阅读
- react-native - ScrollView 不适用于 SimpleAccordian 视图/
- amazon-eks - 加载 UI 时 Argocd 获取静态资源失败
- sql - 选择作为元组数组postgresql
- apt - sources.list 更正从 Ubuntu 19.04 升级到 19.10/“旧版本”
- python - 基于将一个列表值匹配到基于顺序的另一个列表返回一个值
- python - 计算python中二维数组中相邻相等元素的数量
- r - 如何根据一个特定变量对多个变量分组条形图上的条形图重新排序?
- node.js - 您如何为 protobuf 文件生成类型以用于 GRPC?
- apache-kafka - 如何禁用客户端脚本的 Kafka 主机名验证?
- loops - ARM中的字符串长度?