@korsamc

Почему не выполняется работа горутин?

Прочитав теорию работы горутин, в принципе ничего сложно, решаю практическую задачу для их понимания, но столкнулся с проблемой, хотелось бы получить консультацию на живом примере , нежели в выводе "Hello wordl!" горутинами в цикле.
package main

import (
	"bufio"
	"bytes"
	"fmt"
	"golang.org/x/crypto/bcrypt"
	"io"
	"os"
	"strings"
	"sync"
)

var (
	hash_target = "$2y$10$Jk2gOsrCgYKaVutj9JIVYuXlinrpzeqxdXng/Nm96O7t5AvVBir/a"
	dict = "/home/supreme/rockyou.txt"
	r io.Reader
	err error

)
func main(){

	r, err := os.Open(dict)
	if err != nil{
		fmt.Println(err)
	}
	defer r.Close()

	var wg sync.WaitGroup
	var reader *bufio.Reader = bufio.NewReader(r)
	var  pasw string

	wg.Add(1)
	for {
		pasw, err = reader.ReadString('\n')
		if err == io.EOF {
			fmt.Printf("File %s end detected", dict)
		} else {
			pasw = strings.Replace(pasw, "\n", "", -1)
			go hack_pass(pasw, hash_target, &wg)
		}
	}
	wg.Wait()
	}





func hack_pass(str string,hash_target string, wg *sync.WaitGroup){
	fmt.Println("----------------------------------")
		if CheckPasswordHash(str,hash_target){
			fmt.Println("----------------------------------")
			fmt.Println("[SUCCESS]:", str)
			fmt.Println("----------------------------------")
			os.Exit(0)
		}else{
			fmt.Println("[FAILURE]:", str)
		}
		wg.Done()
		return
	}



func CheckPasswordHash(password string, hash string)bool{
	err := bcrypt.CompareHashAndPassword([]byte(hash),[]byte(password))
	return err == nil
}
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
@deliro
Ты в wg добавляешь единицу, первая выполнившаяся горутина эту единицу отнимает, wg.Wait() разблокирует поток и main завершается. wg.Add нужно делать на каждую горутину, которую ты хочешь подождать

Также os.Exit завершает весь процесс. То есть, первая горутина, которая на него наткнётся, завершит всё

Ещё ты абсолютно бесконтрольно спавнишь горутины в бесконечном цикле. Используй адекватное количество горутин, которые работают одновременно и закидывай им таски через каналы

Почитай теорию ещё пару раз

А вот ещё прекрасная статья, которая поможет понять горутины и типичные примеры их использования
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы