@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
}
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
@deliro
Агрессивное программирование
Ты в wg добавляешь единицу, первая выполнившаяся горутина эту единицу отнимает, wg.Wait() разблокирует поток и main завершается. wg.Add нужно делать на каждую горутину, которую ты хочешь подождать

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

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

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

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

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

Войти через TM ID
Похожие вопросы
Universa HODL Москва
от 150 000 руб.
Cryptology Москва
от 2 500 до 4 000 eur.
Effective Technologies Нижний Новгород
от 70 000 руб.
22 янв. 2019, в 17:30
100 руб./за 1000 зн.
22 янв. 2019, в 17:26
100000 руб./за проект
22 янв. 2019, в 16:57
2000 руб./за проект