Anonymous
Они дали оценку в разговоре чуть позднее 2018 года
Anonymous
Когда все критичные issues будут исправлены
Anonymous
С памятью, возможными ошибками, багами
Anonymous
Когда сможет появится уже не альфа на свет
Anonymous
А вполне себе бета для употребления
Maxim
это не значит, что его сразу в прод возьмут
Ivan
из-за обвинений то ли в расизме, то ли в сексизме
похоже всех разрабов там можно обвинить в понизме?
Anonymous
это не значит, что его сразу в прод возьмут
Гошечку сейчас до сих пор называют молодым языком и говорят, что в прод тащить не будут. Зависит от того, на сколько язык подходит под задачи, некоторые гошечку перли в прод даже до 1-й версии.
Anonymous
Все люди разные и мотивы их тоже.
Anonymous
Мне лично сейчас там не хватает пекедж менеджера и его стабилизации в RFC
Anonymous
Сейчас только есть подобие данного менеджера от одного из кор разрабов
Anonymous
Чисто для того, чтобы можно было подключать пакеты с гитхаба
Anonymous
Есть такие упрямые полудурки, которые считают, что лишь ява со своим многотысячнолетним опытом готова к проду )
Anonymous
В остальном я пробовал уже переписывать свои вещи на поняшку, и не хватает еще следующих вещей: - Внешние тулзы по типу gofmt, но сейчас там нету AST пакета для разбора синтаксиса, они тоже его планируют завезти. - Нативных пакетов (Без подключения библиотек через FFI) - Банальных исправлений багов (Натыкался на 2-3 issue существующих самолично, когда писал проект)
Anonymous
В остальном все прекрасно, RFCs появляются, фичи добавляются
Anonymous
Стабилизация растет
Anonymous
Сам язык прекрасно задуман с его акторной моделью
Dmitry
Мне лично сейчас там не хватает пекедж менеджера и его стабилизации в RFC
с пекедж менеджером тебе доступны все библиотеки в нём. с go get git тебе доступны библиотеки всего интернета! (не воспринимайте всерьёз 😊 )
Anonymous
Они сами придерживаются идеалогии Go по поводу пекедж менеджера
Anonymous
Тоже хотят децентрализации
Anonymous
Так что существующий тоже работает с гитом
Michael
go get dep gopkg.in чего ещё не хватает?
Anton
ох, опять вы про пакеты... :)
Anton
у меня иногда складывается ощущение, что людям не нравится go get, потому что люди не хотят -d флаг. люди хотят сразу устанавливать все что там в наборе... а еще наверное ходить по репозиториям с исходниками в vendor папке сложно.. а еще сложнее сделать git checkout нужного тега но вероятно вопрос на самом деле ставиться должен не об "убогости" инструмента, а о том, что не все разработчики следуют какому-то единому "go way" когда публикуют свои поделки на github
Anatoly
Последнее верно
Taras 🦀
doc, err := html.Parse(r) if err != nil { // ... } var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "a" { // вот тут делаешь свою магию } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)
если я пишу так -- var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "td" { for _, k := range n.Attr { if k.Key == "id" { fmt.Println(k.Val) fmt.Println(k) break } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)то я получаю test { id test} я же хочу получить 777 с кода <td id="test">777</td> что я делаю не так?
Aleksandr
выводишь значение атрибута, а надо вывести значение ноды, если нашел подходящий атрибут
Taras 🦀
выводишь значение атрибута, а надо вывести значение ноды, если нашел подходящий атрибут
var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "td" { for _, k := range n.Attr { if k.Key == "id" { //fmt.Println(k.Val) //fmt.Println(k) fmt.Println(n) break } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)в результате &{0xc0421a03f0 0xc0421a0690 0xc0421a0690 0xc0421a05b0 0xc0421a0700 3 td td [{ id test}]} такое падает, что с ним делать? где тут значение?)
Илья
попробуй fmt.Printf("%+v",*n)
Илья
:)
Ivan
у меня иногда складывается ощущение, что людям не нравится go get, потому что люди не хотят -d флаг. люди хотят сразу устанавливать все что там в наборе... а еще наверное ходить по репозиториям с исходниками в vendor папке сложно.. а еще сложнее сделать git checkout нужного тега но вероятно вопрос на самом деле ставиться должен не об "убогости" инструмента, а о том, что не все разработчики следуют какому-то единому "go way" когда публикуют свои поделки на github
Я вот спрашивал про сборку на CI сервере. В ходе экспериментов и чтения гугла выделилась основная проблема - необходимость содержать некую структуру директорий снаружи репозитория проекта. Т.е. вот склонировал я репу и хочу собрать проект. В большинстве языков, с которыми сталкивался до этого, не нужно было сооружать какую-то хитрую структуру, т.к. по текущей директории автоматом ищутся исходники. Вот если go tools научатся смотреть на // import "github.com/my-project/name" и сами будут додумываться, что текущая директория это и есть этот пакет, что указан в // import — вообще будет огонь.
Taras 🦀
попробуй fmt.Printf("%+v",*n)
{Parent:0xc0421ba3f0 FirstChild:0xc0421ba690 LastChild:0xc0421ba690 PrevSibling:0xc0421ba5b0 NextSibling:0xc0421ba700 Type:3 DataAtom:td Data:td Namespace: Attr:[{Namespace: Key:id Val:test}]} я все-равно не нашел 777 и не понял что делать дальше))
Aleksandr
видимо <td ...> text </td> - это три разных ноды, соотстветственно в твоем случае после найденного id надо брать n.NextSibling или что-то такое
Dmitriy / დიმიტრი
Если я перебираю все значения внутри map что бы вывести их на экран и одновременно с этим какая-то из горутин менят map, вызовет ли это какие-то проблемы? Допустим мне не важно изменился ли map или нет, мне важно вывести данные которые в нем были во время начала цикла.
Taras 🦀
{0xc0421d2770 <nil> <nil> 0xc0421d29a0 0xc0421d2af0 1 []} такое получается
Ivan
Можно копить изменения в очереди, пока вывод на экран не завершится.
Aleksandr
{0xc0421d2770 <nil> <nil> 0xc0421d29a0 0xc0421d2af0 1 []} такое получается
func parse() string { h := `<html><body><td id="test">777</td></body></html>` r := strings.NewReader(h) isOpened := false d := html.NewTokenizer(r) for { // token type tokenType := d.Next() if tokenType == html.ErrorToken { return "" } token := d.Token() switch tokenType { case html.StartTagToken: for _, k := range token.Attr { if k.Key == "id" && k.Val == "test" { isOpened = true } } case html.TextToken: if isOpened == true { return token.Data } } } return "" }
Taras 🦀
благодарю, сейчас попробую и изучу кстати еще вопрос - в го есть разница между "string" , 'string' и `string ` ?
Sergey
всем привет новичок в го какую литературу посоветуете ?
Oleksii
https://tour.golang.org/ https://golang.org/doc/effective_go.html https://gobyexample.com/ The Go Programming Language
Oleksii
Должно быть
Oleksii
Язык программирования Go
Sergey
Язык программирования Go
спасибо большое надо погуглить )
Oleksii
http://www.ozon.ru/context/detail/id/34671680/ значит есть :)
Dmitry
можно вызывать методы у указателя равного nil https://play.golang.org/p/EQzWHTZl7b
Sergey
http://www.ozon.ru/context/detail/id/34671680/ значит есть :)
везде кривые сканы ладно потом с компа ещё поищу) просто захотелось компилируемое что то выучить а С и С++ не охота
Anton
можно вызывать методы у указателя равного nil https://play.golang.org/p/EQzWHTZl7b
в го можно сделать еще более страшные вещи, от которых у эликсирщиков генсервы застопятся..
Anton
скинул линк в ЛС
кидай сюда. пусть в файлах повисит. вновь пришедшим проще будет
Oleksii
по этому и не скидывал в чат
Oleksii
могу сайт подсказать, а там поиском уже найти легко
Oleksii
libgen.io
Sergey
а что по поводу книги саммерфилда скажете ? стоит читать?
Илья
почитай
Oleg
http://blog.cleancoder.com/uncle-bob/2017/08/09/ThoughtPolice.html Ответ Uncle Bob'а на увольнение программиста из гугла публиковали сюда?
Илья
https://github.com/golang/go/wiki/ExperienceReports#context
Илья
хорошая подборка статей
Anonymous
Привет народ! Есть вопрос, здесь нубочат или есть шарющее в syscall'ах? Надо другой процесс SuspenThread'нуть
Taras 🦀
код проверенный - 777 выдает.
не знаю как на винде - завтра на работе могу проверить но на убунте просто подвисает у меня получилось по-другому var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode { for _, k := range n.Attr { if k.Key == "id" && k.Val == "test" { //fmt.Printf("%s\n", n.Data) var mnn = n.FirstChild my_needs_value = mnn.Data //fmt.Printf("%s\n", mnn.Data) break } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)
Taras 🦀
кстати да) эрланг в инет стучит заметно быстрей чем го (как минимум на моем дохловатом компе) зато с хешированиями - наоборот ))
Taras 🦀
ты не читаешь что тебе пишут. я тебе готовый код дал
да говорю же вам - у меня он не работает (запишем это на мою кривизну рук и замнем для ясности)) ) ураа) у меня получилось) благодарямс всем кто помог
Taras 🦀
🦀 крабик только одно сообщение нашел (может другое потерялось где-то)
Aleksandr
func parse() string { h := `<html><body><td id="test">777</td></body></html>` r := strings.NewReader(h) isOpened := false d := html.NewTokenizer(r) for { // token type tokenType := d.Next() if tokenType == html.ErrorToken { return "" } token := d.Token() switch tokenType { case html.StartTagToken: for _, k := range token.Attr { if k.Key == "id" && k.Val == "test" { isOpened = true } } case html.TextToken: if isOpened == true { return token.Data } } } return "" }
Taras 🦀
этот код я и пробовал
Мерль
Привет народ! Есть вопрос, здесь нубочат или есть шарющее в syscall'ах? Надо другой процесс SuspenThread'нуть
1. RTFM, в частности вот это https://godoc.org/os#Process.Signal Сигналы на выборы https://golang.org/pkg/syscall/#pkg-index 2. Не очень приятно отвечать на грубый вопрос.Тут вам ничем никто не обязан. Хотите получить ответ - подробно опишите проблему и что вы пытались сделать, чтобы её решить
Мерль
Вам нужен скорее всего SIGSTOP
Anonymous
В винде?