
Kirill
29.07.2016
07:21:54
ну, у меня проблем не было

Dmi
29.07.2016
07:23:57

Mars
29.07.2016
07:24:07


Daniel
29.07.2016
07:24:10
о, кстати. а что такое go generate. моего английского не хватило, чтобы сложить слова в смысл. не можешь буквально одной-двумя фразами? мне тупняк пройти
go generate - это некоторое соглашение об описании внешних тулзов в тексте go-проекта. специального вида комментарий.
и программа, которая обходит дерево сорцов и вызывает, что сказано
это что сказано может делать что угодно, но идея в том, что оно генерит сорцы для go, которые потом компиляются а проект
например - ресурсы так можно в свой проект включать, с помощью go-bindata. из файлов генерится go-файлик, в котором эти файлы присутствуют в виде []byte
ну или вот у нас есть в проекте такой набор комментов:
//go:generate bash -c "printf 'package main\n\n' > version.go"
//go:generate bash -c "printf 'const globalVersionString=\"%s\"\n' git rev-parse HEAD >> version.go"
//go:generate bash -c "printf 'const globalVersionUint32=0x%7.7s\n' git log --pretty=format:'%h' -n 1 >> version.go"
//go:generate bash -c "printf 'const globalVersionTimestamp=%d\n' git log -1 --format=%ct >> version.go"

Google

Mars
29.07.2016
07:24:28
Go к этому располагает


Daniel
29.07.2016
07:25:29
нету никакого makefile

Mars
29.07.2016
07:26:32
Вызывать будет нужно либо go generate либо make build либо что то еще
Если так, то все проще описывать сборку где то вне исходников на го

Daniel
29.07.2016
07:27:31
go generate у меня, очевидно, есть - он из базовой поставки go
а вот make|gmake у меня может и не быть

Sergey
29.07.2016
07:28:17
мы кстати для версии используем -ldflags "-X main.version=$version"

Daniel
29.07.2016
07:28:18
нахера еще один тулчейн втаскивать в экосистему

Mars
29.07.2016
07:29:20

Sergey
29.07.2016
07:29:22
правда оно кажется не сработает при const version, только при var version

Kirill
29.07.2016
07:29:57

Dmi
29.07.2016
07:39:07
какой проект можно посмотреть, для того чтобы понять, как привильно организовать структуру, правильно стрктурировать в пакеты, и т.д. ?

Google

Phil
29.07.2016
07:39:52


Daniel
29.07.2016
07:40:13
а что такое - правильно

Dmi
29.07.2016
07:40:45
best practics

Daniel
29.07.2016
07:41:19
эмм
у нас проекту полгода
я уже раза 4 перекраивал его структуру
и в пятый не перекраиваю только потому, что настала пора его полностью переписать :)

Dmi
29.07.2016
07:42:34
просто хотелось взглянуть, как грамотные этом плане, люди это делают

Daniel
29.07.2016
07:43:19
на самом деле - можно поглядеть в telegraf, который от influxdb

Phil
29.07.2016
07:43:29

Daniel
29.07.2016
07:43:30
там оправданно сложная структура
но сам influx такое дерьмо, что возникают сомнения в грамотности этих людей
даи telegraf задуман прикольно, а реалиован как обычно местами

Dmi
29.07.2016
07:44:53

Nikolay
29.07.2016
07:59:14

Daniel
29.07.2016
08:00:14
json не годится для конфигов - в нем нет комментов

Kirill
29.07.2016
08:00:28
вида свойство объекта __comment

Daniel
29.07.2016
08:01:23
yaml, правда, тоже счастье то еще - в нем пробельные символы синтаксической значимостью обладают

Google

Мерлин
29.07.2016
08:02:25

Nikolay
29.07.2016
08:02:49
@onokonem в обучном json каментов нет, в формате jsonshema - можно указать описание поля:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for a product",
"type": "integer"
}
},
"required": ["id"]
}

Dmi
29.07.2016
08:02:57

Nikolay
29.07.2016
08:03:21
Т.е. в json хранится не сам конфиг, а его структура
сам конфиг уже из этой структуры генерится

Мерлин
29.07.2016
08:04:17
Ещё в одно время я пришёл к тому, что пользовательские параметры должны задаваться через флаги, а конфигурация лежит в бд

Vitaliy
29.07.2016
08:24:39
скорее consul

Daniel
29.07.2016
08:38:43
ну вот у нас все равно ароспайк - в него и сложили мы конфиг.

Nikita
29.07.2016
09:16:29

Amir
29.07.2016
09:39:21
Не решились :(
А объясните плиз принцип работы этой конструкции
s := []int{2, 3, 5, 7, 11, 13}
s = s[:0]
s = s[:4]
ну инициализация среза я понял в переменную s
получается s и s[] разные конструкции да?

Zver
29.07.2016
10:23:31
Одинаковые.

Google

Zver
29.07.2016
10:23:37
Слайсы.

Amir
29.07.2016
10:23:57
ну мне после руби немного нелогично)
в s литерал слайса
s = s[:0] урезаем до 0
срез пустой
s = s[:4] расширяем до 4х элементов
теперь там снова данные
почти магия

Zver
29.07.2016
10:24:49
Кассандра инициализируешь, то это уже слайс, а потом слайс от слайса.

Admin
ERROR: S client not available

Amir
29.07.2016
10:25:57
получается s = []int{2, 3, 5, 7, 11, 13}
s ссылается на литерал []int{2, 3, 5, 7, 11, 13}
которые ничерта не меняется
и даже если я напишу s2 := s[:4]
и дальше s3 := s[2:]
я буду получать срезы из лиетала?)

Zver
29.07.2016
10:29:32
Вообще надо запомнить, что слайс это просто ссылка на диапазон массива.

Amir
29.07.2016
10:29:43
ок
это я уже осознал
это надо вкурить хорошенько

Google

Zver
29.07.2016
10:30:21
Фактически просто с одним и тем же масмивом работаешь и все.

Amir
29.07.2016
10:30:31
а если я добавлю туда элементы

Zver
29.07.2016
10:30:58
А вот это надо попробовать. )

Amir
29.07.2016
10:32:59
никуя не просто)
https://blog.golang.org/go-slices-usage-and-internals
с картинками стало понятней)

Daniel
29.07.2016
10:33:29

Amir
29.07.2016
10:33:43
Мне только стало жутко интересно почему в английской статье вот это - x := [3]string{"Лайка", "Белка", "Стрелка"}

Phil
29.07.2016
10:34:00

Daniel
29.07.2016
10:34:13
подлежащий массив может остаться тем же, а может быть заменен на массив большего размера (с копированием информации из старого)

Phil
29.07.2016
10:34:52

Amir
29.07.2016
10:35:30
ой как интересно

Zver
29.07.2016
10:35:37
Перезаписывается элемент массива при добавлении в слайс.
packages = s[:0] main
import (
"fmt"
)
func main() {
s := []int{2, 3, 5, 7, 11, 13}
s = s[:0]
s = s[:4]
s = append(s, 5)
s = s[:6]
fmt.Printf("%v",s)
}

Amir
29.07.2016
10:35:44
если добавить к урезанному слайсу оно влезет перед урезанными элементами

Zver
29.07.2016
10:36:02
[2 3 5 7 5 13]

Amir
29.07.2016
10:36:16
хм
заменяет
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=6 cap=6 [2 3 5 7 100 13]
len=6 cap=6 [2 3 5 7 100 13]

Zver
29.07.2016
10:37:00
Получается расширило слайс в массиве и перезаписало соответствующий элемент.
Если еще пару раз добавить, то расширит массив.