Sergey
он не показывает переменные
должен ну питон просто дебажил в вскоде все норм было
Anonymous
fmt.Println
у меня всё работает в программе кроме парсера аргументов
Anonymous
fmt.Println
fmt.printf выводит пустоту
Sergey
fmt.printf выводит пустоту
значит ничего нет в переменой
Sergey
точнее скорее пустая строка
Aleksey
возьми github.com/pkg/error
Anonymous
значит ничего нет в переменой
я хочу понять какого Хуана Иглесиаса такое происходит
Sergey
я хочу понять какого Хуана Иглесиаса такое происходит
ну объявил переменную строку и ничего не положил туда
Aleksey
если объявил и ничего нне сделал то ккомпилятор должен ругнуться
Slava
vscode вроде как поддерживает дебаг через delve
Anonymous
https://gist.github.com/kinoher/5fe3440776297c5dcf504309a7efbd21
Sergey
если объявил и ничего нне сделал то ккомпилятор должен ругнуться
а точно ну значит ничего не вернул в переменную
Anonymous
https://golang.org/pkg/flag/#example_
предлагаешь не парить мозг и использовать стандартный парсер?
nikita
конечно , почти уверен, что тратишь время на написание своего в рамках другой задачи
Илья
а что ты ожидаешь увидеть в ответе qrgq?
Илья
я по доке и не понял, что там должно лежать, тебе нужно в options смотреть, вроде бы
Vladimir
он тебе заполняет структуру
Vladimir
package main import ( "fmt" "github.com/jessevdk/go-flags" ) //var gr = parser.AddGroup("ss", "aa") func main() { var options struct { Verbose bool `short:"v" long:"verbose" description:"Show verbose debug information"` File []string `short:"f" long:"file" description:"full path to file ONLY IMAGES"` Host string `short:"H" default:"127.0.0.1:7779" description:"masterhost (ip:port)"` // Msg []string `group:"msg"` } argq, err := flags.Parse(&options) if err != nil { if flagsErr, ok := err.(*flags.Error); ok && flagsErr.Type == flags.ErrHelp { fmt.Printf("%v", argq) fmt.Println("1") } else { fmt.Println("2") fmt.Printf("%v", argq) } } else { fmt.Println("#3") fmt.Printf("%v,,,,,,", options) //[] } }
Vladimir
[none-none][20:06:36] vlazarenko@alluminium (~/go/src/blip)$ ./blip -H="127.0.0.1:8989" -v #3 {true [] 127.0.0.1:8989},,,,,,
Vladimir
равно как и в #3 печатать err было бесполезно, ибо оно в else от if(err != nil), т.е. заведомо всегда nil 🙂
Vladimir
вариация на тему: [none-none][20:15:01] vlazarenko@alluminium (~/go/src/blip)$ ./blip -H="127.0.0.1:8989" -v #3 [./blip -H=127.0.0.1:8989 -v] {true [] 127.0.0.1:8989} [none-none][20:15:03] vlazarenko@alluminium (~/go/src/blip)$ cat main.go package main import ( "fmt" "os" "github.com/jessevdk/go-flags" ) //var gr = parser.AddGroup("ss", "aa") func main() { var options struct { Verbose bool `short:"v" long:"verbose" description:"Show verbose debug information"` File []string `short:"f" long:"file" description:"full path to file ONLY IMAGES"` Host string `short:"H" default:"127.0.0.1:7779" description:"masterhost (ip:port)"` // Msg []string `group:"msg"` } argq, err := flags.Parse(&options) if err != nil { if flagsErr, ok := err.(*flags.Error); ok && flagsErr.Type == flags.ErrHelp { fmt.Printf("%v", argq) fmt.Println("1") } else { fmt.Println("2") fmt.Printf("%v", argq) } } else { fmt.Println("#3") fmt.Printf("%v\n%v\n", os.Args, options) //[] } }
Anonymous
он тебе заполняет структуру
вы реально помогли теперь можно и сообщение отсылать пробелами
Anonymous
спасибо
Vladimir
не за что 🙂
Nikita
я неделю назад дебажил отлично себя чувствовал
Anonymous
норм он пашет
хм вполне может быть я его готовить не умею
Nikita
Nikita
точку сбоку ставишь и нажимаешь f5
Nikita
Я хотел бы помощи умный и прошаренный. Мне человеку который всего полгода в разработке и то только в js. Этот кусок кода не потянет абсолютно
Nikita
https://go-tour-ru-ru.appspot.com/methods/12
Nikita
var t *T i = t describe(i) i.M() i = &T{"hello"} describe(i) i.M()
Nikita
тут создается сначала переменная t с указателем на T?
Nikita
а потом в ту же переменную по указателю записывают данные?
Nikita
это что получается, что структуры как функции в js?
Nikita
что вообще происходит...
Nikita
это получается, что если методу указать указатель, то он может ожидать nil, а если указать значение, то nil в него попасть не может и проверку на нил проверсти невозможно?
Oleksii
var t *T i = t describe(i) i.M() i = &T{"hello"} describe(i) i.M()
Ты создаёшь i типа интерфейса I, твоя структура T имеет такой набор методов, что удовлетворяет контракт интерфейса I, поэтому ты можешь сделать i = t (где t - типа T, но со значением nil)
Oleg
это получается, что если методу указать указатель, то он может ожидать nil, а если указать значение, то nil в него попасть не может и проверку на нил проверсти невозможно?
Если получатель метода - указатель, то он может быть nil. Значения у структур и примитивных типов не могут быть nil.
Oleksii
Потом по этому же i присваивается экземпляр структуры T (адрес его ячейки памяти), поэтому теперь i имеет и тип, и значение
Anonymous
var t *T i = t describe(i) i.M() i = &T{"hello"} describe(i) i.M()
какая-то жесть. я с трудом разобрался в этом, хотя не новичок. что это за код, зачем он новичку? в нем нет никакого смысла
Nikita
выше ссылка на go tour
Oleksii
Это с golang tour
Vladimir
я на самом деле с трудом понимаю применимость такого рода изврата
Oleg
Видимо, так пытаются объяснить, почему интерфейс может быть не nil, хотя в нем нулевое значение.
Vladimir
как оно работает понимаю, а вот нахрена бы оно мне в реальной жизни могло бы понадобиться - нет
Oleksii
Буквально сегодня читал в блоге Cheney, что типизированный nil - это зло :)
Oleksii
И тут на тебе)
Michael
nil это вам не nil
Vladimir
в смысле как? 🙂 руками. указатель на нее
Oleksii
Ты не смог бы сделать так: var t T t = nil
Oleg
Какая строка? :)
Michael
про гынырыки уже вспоминали в вечерней беседе?
Nikita
i = &T{"hello"} и var t *T
Nikita
в чем разница, я не понимаю
Oleksii
аа
А вот так запросто: var t *T // t = nil
Oleg
Первое - присвоение, второе - объявление
Oleg
;)
Vladimir
var t *T - t = nil
Nikita
хммм
Nikita
а в чем разница t T и t *T
Vladimir
указатель на структуру и дереференс указателя
Oleksii
в чем разница, я не понимаю
Указатель на ячейку памяти и значение
Vladimir
t T // dereference
Vladimir
t *T // pointer
Oleksii
t T // dereference
Наоборот
Oleg
в чем разница, я не понимаю
var t *T объявляет нулевой указатель. t = nil. И когда ты сделаешь i = t в i тоже будет nil. А когда ты делаешь i = &T{...} ты создаешь новое значение структуры и указатель на него записывает в i. В i уже не nil, а структура со строкой.
Vladimir
ой, да, сорри, прогнал
Vladimir
наоборот 🙂
Oleg
dereference. Сейчас только запутаете человека лишними терминами :)
Oleg
получается i = T{} и i = &T{} одно и тоже, так?
Присвоение и объявление не одно и то же!
Oleg
Присвоение что-то делает