我已经给了一个任务,在文本文件中搜索URL使用eng regex和goroutines与waitgroup的方式给定的方式:文本应该在N个工作者(goroutine)之间分配,每个goroutine搜索//https://,等待组中的goroutine,最终结果应该是所有goroutine的一个字符串切片(URL)。
我正在研究一个txt.file,它在一个字符串中有几十个东西,但是现在我知道如何从文本中提取一个URL切片,但是不需要分割文本和goroutine...
import (
"fmt"
"os"
"regexp"
"sync"
"time"
)
func Parser1(wg *sync.WaitGroup) {
time.Sleep((1 * time.Second))
b, err := os.ReadFile("repitations")
if err != nil {
fmt.Print(err)
}
str := string(b)
re := regexp.MustCompile(`(?:https?://)?(?:[^/.]+\.)*google\.com(?:/[^/\s]+)*/?`)
fmt.Printf("%q\n", re.FindAllString(str, -1))
wg.Done()
}
func Parser2(wg *sync.WaitGroup) {
time.Sleep((1 * time.Second))
b, err := os.ReadFile("repitations")
if err != nil {
fmt.Print(err)
}
str := string(b)
re := regexp.MustCompile(`(?:https?://)?(?:[^/.]+\.)*google\.com(?:/[^/\s]+)*/?`)
fmt.Printf("%q\n", re.FindAllString(str, -1))
wg.Done()
}
func main() {
var wg sync.WaitGroup
wg.Add(2)
go Parser1(&wg)
go Parser2(&wg)
wg.Wait()
fmt.Println("Well done!")
}````
1条答案
按热度按时间5vf7fwbs1#
拆分您的读取过程。
使用os.open()打开文件,然后使用file.readAt()顺序读取。
将读取长度和偏移量从开始传递到解析器()