
Sergey
11.04.2018
12:50:44
у вас в приложении value чем может быть?
тут вы его массивом строк объявляете
и для корректной отработки, его нужно поэлементно конвертировать в массив интерфейсов. )

Aleksey
11.04.2018
12:52:33
Скорее всего дальше строки, числа, массива строк и массива чисел не зайдет, но хочется идеальный код, который работает с любыми типами. А вот относительно поэлементой конвертации, сначала нужно узнать, что передо мной массив, чтобы каждый элемент конвертировать.

Google

Sergey
11.04.2018
12:52:44
value = []string{"1", "2", "3"}
вот так не работает конвертирование типов

Aleksey
11.04.2018
12:53:27
Ладно, спасибо за идеи, задача далеко не самая важная, просто хотелось поглубже углубится в систему типов. Скорее всего прикручу reflection
Это не конвертация, а способ описать задачу.

Sergey
11.04.2018
12:57:18
https://play.golang.org/p/tMgXavupvJo

Александр
11.04.2018
13:01:00
Ладно, спасибо за идеи, задача далеко не самая важная, просто хотелось поглубже углубится в систему типов. Скорее всего прикручу reflection
v := reflect.ValueOf(x)
switch v.Kind() {
case reflect.Bool:
fmt.Printf("bool: %v\n", v.Bool())
case reflect.Int, reflect.Int8, reflect.Int32, reflect.Int64:
fmt.Printf("int: %v\n", v.Int())
case reflect.Uint, reflect.Uint8, reflect.Uint32, reflect.Uint64:
fmt.Printf("int: %v\n", v.Uint())
case reflect.Float32, reflect.Float64:
fmt.Printf("float: %v\n", v.Float())
case reflect.String:
fmt.Printf("string: %v\n", v.String())
case reflect.Slice:
fmt.Printf("slice: len=%d, %v\n", v.Len(), v.Interface())
case reflect.Map:
fmt.Printf("map: %v\n", v.Interface())
case reflect.Chan:
fmt.Printf("chan %v\n", v.Interface())
default:
fmt.Println(x)
}
определить слайс или не слайс только так
через рефлект


Aleksey
11.04.2018
13:01:43
Спасибо, попробую
У меня еще такой вопрос, как в го принято опциональные аргументы использовать? Как я понял, самый правильный способ, это через фабрики функций типа:
executeTemplate(“this is my array - {{array}}”, WithVar(“array”, []string{“1”, “2”, “3”}))

Sergey
11.04.2018
13:10:52
Это что-ли?
func t(s string, args ...interface{}) {
fmt.Println("Строка: ", s)
if len(args) > 0 {
fmt.Println("Аргументы: ", args)
}
}

Daniel
11.04.2018
13:12:26

Kirill
11.04.2018
13:12:27

Daniel
11.04.2018
13:12:43
на самом деле - вариантов два

Google

Kirill
11.04.2018
13:13:30
если принимать ссылки на тип, то их можно передать как нил

Daniel
11.04.2018
13:13:33
1. передавать .... годится для однотипных.
2. принимать на вход структуру, инициализировать только нужное
но на перваый взгляд опциональные аргументы это проблемы в дизайне

Александр
11.04.2018
13:19:29
если там скажем штук 20 элементов

Daniel
11.04.2018
13:19:49
нинасколько
это синтаксический сахар вокруг передачи массива

Marlik
11.04.2018
13:21:10

Айбелив
11.04.2018
13:21:16

Александр
11.04.2018
13:33:57

Marlik
11.04.2018
13:59:28
я для примера
Ты вроде писал как-то что пихал ресурсы в бинарник, как?

Daniel
11.04.2018
14:00:16
https://github.com/jteeuwen/go-bindata

Marlik
11.04.2018
14:00:58

Daniel
11.04.2018
14:00:59
https://github.com/gobuffalo/packr
https://github.com/siongui/goef
тысячи их

Александр
11.04.2018
14:01:31
я юзал - github.com/gobuffalo/packr

Marlik
11.04.2018
14:02:51
Спасибо, почитаю.
тысячи их
А базу sqlite мона пихнуть, небольшую?

Google

Marlik
11.04.2018
14:05:13
Прост пока не в курсах, как там и что...

Александр
11.04.2018
14:07:13
а кто работал с opentracing-go
я упарился уже с ним O_o
нужно метрики подрубить, которые потом будут выгружены в прометеус (через jaeger)
сделал:
metricsFactory := prometheus.New()
// Initialize tracer with a logger and a metrics factory
_, err = jcfg.InitGlobalTracer(
appConfig.Tracing.ServiceName,
jaconfig.Logger(jaeger.StdLogger),
jaconfig.Metrics(metricsFactory),
)
вроде больше ничего и не надо O_o
далее спавны идут уже
но что-то я не вижу моего приложения в выгрузках из джаггер
документации 0 как всегда

Daniel
11.04.2018
14:10:20

Александр
11.04.2018
14:10:53
если вы хотите условно базу в базу O_o

Daniel
11.04.2018
14:11:21
ма-ма

Александр
11.04.2018
14:11:52
ма-ма
ну не знаю, я же правильно понимаю что он базу в базу хочет? O-o

Daniel
11.04.2018
14:12:20
он хочет базу в бинарник

Александр
11.04.2018
14:12:35
ну и пусть через gob структуру бахнет :)

Daniel
11.04.2018
14:12:35
и я, теоретически, знаю, как

Александр
11.04.2018
14:13:11
ну так не обязательно
gob же не только в файл умеет

Google

Александр
11.04.2018
14:13:21
оно и по сети и просто буфер может сделать

Marlik
11.04.2018
14:24:29

m
11.04.2018
14:29:02
День добрый.
Есть какая-то тулза, которая показывает копипасту в коде? Раньше пользовался https://github.com/kucherenko/jscpd , но хочется большего: находить куски кода, которые похожи, а не полные копии. Например, переменные просто другое название имеют или строчки местами переставлены. Т.е. такой нечёткий поиск похожего кода.

Marlik
11.04.2018
14:30:38

Daniel
11.04.2018
14:31:02
https://github.com/mibk/dupl

Admin
ERROR: S client not available

Marlik
11.04.2018
14:31:34

m
11.04.2018
14:34:22

Marlik
11.04.2018
14:35:02
А есть такое же только для текста, например кириллицы?

Daniel
11.04.2018
14:36:41
не знаю

m
11.04.2018
14:37:59
А я его использую. Но его нет смысла запускать постоянно. Может раз в пол года.
точнее, использую отдельные тулзы из его набора.

Daniel
11.04.2018
14:39:10
его имеет смысл гонять перед сборкой очередной версии на деплой

m
11.04.2018
14:51:17
Надо признать, что ценность найденного там так себе. Но для перфекциониста самое то.

Daniel
11.04.2018
14:58:21
ну мы же и не думали, что у нас полпроекта - копипаста?...

m
11.04.2018
15:38:09
Не думали. Но предполагали.
dupl полезен тем, что находит потенциальные места для рефакторинга. Копипаста ведь разная бывает. Нашлось, например, что у двух объектов похожий метод. Но он сейчас похожий, а завтра в один из них что-то добавиться. Не городить же сейчас слияние этих объектов, а потом расцеплять их обратно.
Наткнулся тут на https://github.com/tdewolff/minify . На удивление хороший инструмент. сжимает html-страничку с вставками css, svg и js.
Позволяет не сдерживать себя в написании комментариев в том же JS-е.

Google

Marlik
12.04.2018
05:11:09

Olzhas
12.04.2018
05:17:04
вебпак на го переписать

Makkusu
12.04.2018
07:37:33
Доброе утро всем!) Кто нибудь стилизовал Excel файлы с пакетом от tealeg?

Mr
12.04.2018
09:19:53
Никто, кстати, не видел шаблонизаторов аля text/template для XLSX?

Phil
12.04.2018
10:08:29
Ох, xslt в 2018 году

X
12.04.2018
10:09:56
Привет. https://ru.stackoverflow.com/a/436577 - тут человек объясняет, что есть интерфейсы, я смотрю на код и у меня есть вопрос, конечно ответ наверное будет простой, но та реализация, что есть, почему нельзя просто у каждой структуры сделать методы area()?
и сможет ли кто-нибудь привести наверное более полезный пример использования интерфейсов

Marlik
12.04.2018
10:11:17

X
12.04.2018
10:12:22

Vladislav
12.04.2018
10:21:31
Доброго времени суток. Нужен совет/наставление.
Есть шаблон html/template и есть структура которую нужно вывести в виде таблицы. Но я не понимаю как это сделать внутри отдельной функции.
Подскажите, пожалуйста, что нужно написать в
func indexHandler(w http.ResponseWriter, r *http.Request) {} чтобы вывести вот это (тут шаблон и сама структура - https://pastebin.com/8dR3hy46 ). Или как-то по-другому можно вносить данные в шаблон?

Aleksey
12.04.2018
11:09:32
Всем привет, есть объект и нужно создать новый с одним измененным полем, есть такая возможность?
Более подробно:
type Car struct {
maxSpeed int
color string
}
myCar := Car{100, “red”}
anotherCar := Car{speed: 120, …myCar} // создать машину со всеми значениями myCar, но другой скоростью без перечисления всех свойств (их может быть много и поэтому не хочется перечислять)
Важна иммутабельность

Marlik
12.04.2018
11:10:33

Aleksey
12.04.2018
11:11:08
Неизменяемость, то есть myCar.speed = 120 не подойдет