@proGO

Страница 1299 из 1674
The
20.03.2018
17:44:11
вы сравниваете два интерфейса, но под ними лежат два разных динамических типа. как-то так.

вообще, если вы работаете с базой, то лучше опираться на код ошибки

чем на текст ошибки

Google
Roman
20.03.2018
17:59:03
err := doit() switch err := err.(type) { case nil: // great job! case CantDoItErr: // that's an excuse, back to work! case BrokeMyLegErr: // hilarious excuse, back to work! default: // oh, come on, what's wrong? }

Aleksandr
20.03.2018
18:03:48
кажется я только сейчас понял, errors.New() возвращает структуру errors, а err, это вроде интерфейс, а значит *error?
вас запутали все выше высказавшиеся. errors.New возвращает по интерфейсу error, а по имплементации *errorString. и сравниваются два *errorString

The
20.03.2018
18:09:20
вас запутали все выше высказавшиеся. errors.New возвращает по интерфейсу error, а по имплементации *errorString. и сравниваются два *errorString
да, верняк, errNoRows тоже через errors.New() работает, но они не равны, в данном случае, потому что оба ссылочного типа, но при сравнении ссылочных типов, они будут true в том случае, если ведут на один и тот же объект в памяти. так правильней?

ну я надеюсь хоть что-то прояснил в интерфейсах товарищу выше

Труба
20.03.2018
18:12:13
Мне все ответы очень понравились, потому что обработка ошибок и вообще работа с интервейсами это очень важная вещь

Vadim
20.03.2018
18:28:28
Ребят

Нужна помощь. Или я тупой, или компилятор. Я написал две константы, а он их не видит. Также метод один не видит. Что делать?

Vadim
20.03.2018
18:44:07
const blocksBucket = "blocks" func (bc *Blockchain) AddBlock(data string) { var lastHash []byte _ = bc.db.View(func(tx *bolt.Tx) error{ b:= tx.Bucket([]byte(blocksBucket)) lastHash = b.Get([]byte("l")) return nil }) newBlock := NewBlock(data,lastHash) _ = bc.db.Update(func(tx *bolt.Tx) error{ b := tx.Bucket([]byte(blocksBucket)) _ = b.Put(newBlock.Hash, newBlock.Serialize()) _ = b.Put([]byte("l"),newBlock.Hash) bc.tip = newBlock.Hash return nil }) Ошибка: undefined: blocksBucket

Alexey
20.03.2018
18:45:42
Это всё в одном файле?

Vadim
20.03.2018
18:46:00
func (b *Block) Serialize() []byte{ var result bytes.Buffer encoder := gob.NewEncoder(&result) _ = encoder.Encode(b) return result.Bytes() } Ошибка: newBlock.Serialize undefined (type *Block has no field or method Serialize)

Да

Google
Vadim
20.03.2018
18:46:27
func (bc *Blockchain) AddBlock(data string) { var lastHash []byte _ = bc.db.View(func(tx *bolt.Tx) error{ b:= tx.Bucket([]byte(blocksBucket)) lastHash = b.Get([]byte("l")) return nil }) newBlock := NewBlock(data,lastHash) _ = bc.db.Update(func(tx *bolt.Tx) error{ b := tx.Bucket([]byte(blocksBucket)) _ = b.Put(newBlock.Hash, newBlock.Serialize()) _ = b.Put([]byte("l"),newBlock.Hash) bc.tip = newBlock.Hash return nil }) }

Alexey
20.03.2018
18:49:06
А когда компилируете, точно все файлы указываете?

Vadim
20.03.2018
18:49:47
Да

Сейчас все тоны кода переместил в один файл. Всё равно

Alexey
20.03.2018
18:53:46
Ну магии же обычно не бывает..

Точно newBlock - именно тот самый Block?

Vadim
20.03.2018
18:54:59
Да

Alexey
20.03.2018
18:58:09
Попробуйте вообще в отдельный пакет в один файл вынести только то, что нужно, чтоб воспроизвести ошибку. Struct Block, newBlock, Serialize и там в main запустить

Просто 99.999%, что где-то что-то на самом деле не то, что вы думаете там есть

Typeof можно попринтить)

Vadim
20.03.2018
19:05:51
Перезагрузил комп всё заработало

Andrey
20.03.2018
19:05:52
Как быть с конфигами в го?

type Configuration struct { port int } func main() { configuration := Configuration{} err := gonfig.GetConf("config/config.development.json", &configuration)

Vadim
20.03.2018
19:06:12
Я в негодовании

Andrey
20.03.2018
19:06:31
например хочу сделать так, но как мне заюзать конфиг в своих пакетах?

tsov
20.03.2018
19:11:24
слать ссылку на конфиг

Aleksandr
20.03.2018
19:11:39
Перезагрузил комп всё заработало
Ошибка новичка не перезагружать комп когда гошный код не компилится)

Vadim
20.03.2018
19:27:21
На самом деле магия какая-то

The
20.03.2018
19:29:19
это не магия, а волшебство

Google
Alexey
20.03.2018
19:30:33
например хочу сделать так, но как мне заюзать конфиг в своих пакетах?
Лучше в свои пакеты из конфига передавать только то, что надо. Параметры в NewSomething(...) например

Andrey
20.03.2018
19:31:50
читаю про него, но он чет слишком большой мне столько не надо https://github.com/spf13/viper

Дмитрий
20.03.2018
19:34:11
я использовал https://github.com/BurntSushi/toml

Marlik
20.03.2018
19:39:33
Кто там про вендора говорил? Куда посмотреть?
Vendor лехко, у мну работает на ура.

Arch
20.03.2018
19:44:06
Попробовал этим вечером писать в vscode, ощущение как будто на инвалидном кресле на формуле 1 участвую

И вроде особых претензий нет, но как будто весь в гибче, за вечер сто строк кода ?

Arch
20.03.2018
19:45:20
Goland / sublime text
Ну я после сублима и пробовал vscode

Vadim
20.03.2018
19:46:02
Я последнее время стал большим фанатом JetBrains и всех их продуктов

Marlik
20.03.2018
19:46:51
например хочу сделать так, но как мне заюзать конфиг в своих пакетах?
У мну так type Config struct { ... } func LoadConfig() error { b, err := ioutil.ReadFile("config.json") if err != nil { return errors.Wrap(err, "Not read config.json") } err = json.Unmarshal(b, &conf) if err != nil { return errors.Wrap(err, "Not unmarshal data in config.json") } return err } Глобально выставил переменную var conf *Config Теперь в main делаю так err := LoadConfig() if err != nil { log.Fatal(err) } И теперь я обращаюсь к тому что лежит в конфиге так err = InitDB(conf.DatabaseNameAndPath, err)

Arch
20.03.2018
19:47:09
Ой не, пробовал пичарм, меня очень впечатлило, что идешка грузалась пол минуты(! на ссд), не дождался закрыл, сублим наше все

Vadim
20.03.2018
19:48:28
Marlik
20.03.2018
19:49:34
Спасибо
Сам config.json ` { "тут key": "тут value", }

Dmitrii
20.03.2018
21:11:19
всем привет. ребят есть примеры подвязки C++ shared либы в go проект?

Aleksandr
20.03.2018
21:11:52
всем привет. ребят есть примеры подвязки C++ shared либы в go проект?
https://www.google.com/search?safe=off&client=ubuntu&hs=LKR&channel=fs&ei=CnmxWov-NsvSkgWWtp3IDA&q=golang+cgo+c%2B%2B&oq=golang+cgo+c%2B%2B&gs_l=psy-ab.12...0.0.0.8346.0.0.0.0.0.0.0.0..0.0....0...1..64.psy-ab..0.0.0....0.9nDCeqJzozs

Александр
20.03.2018
22:53:05
сейчас бы казино обманывать в 2018....

Marlik
20.03.2018
23:15:52
@onokonem @pragus @demeliorator

Kirill
20.03.2018
23:50:50
Ребята, кто не спит?

Google
The
20.03.2018
23:51:28
я не спит

Roman
20.03.2018
23:52:17
Kirill
20.03.2018
23:52:59
Есть приложение, типа голосовалки. Один пользователь может проголосовать за другого один раз. Нужен изящный способ достать из базы случайные профили, за которые текущий пользователь ещё не голосовал

Типа как в тендере логика

Мне в голову только цикл приходит.

Admin
ERROR: S client not available

The
20.03.2018
23:53:35
ээ

а обычный запрос чем не подходит?

Roman
20.03.2018
23:54:34
если очень банально: инкрементальный id пользователей и у каждого пользователя актуальный последний, который представляет собой типа указателя в стриме

но это если очень банально

The
20.03.2018
23:55:52
да, есть же хеш индексы, по ним вообще быстро можно делать NOT IN

Kirill
20.03.2018
23:56:04
Мне кажется что если доставать все голоса текущего пользователя, то это не оптимально

Roman
20.03.2018
23:56:08
SQL?
SQL это бд, а тебе нужен алгоритм

Kirill
20.03.2018
23:56:51
Да, вот на счёт not in сомневаюсь

Roman
20.03.2018
23:56:51
да, есть же хеш индексы, по ним вообще быстро можно делать NOT IN
предлагаешь рандомно брать из базы и foreach NOT IN user.viewed?

The
20.03.2018
23:57:06
зачем?

Kirill
20.03.2018
23:57:18
Без foreach

Google
Kirill
20.03.2018
23:57:47
Попробую not in, посмотрю на скорость

The
20.03.2018
23:57:50
просто делаем выборку всех юзеров, за которые голосовали, делаем NOT IN список юзеров, рандом + LIMIT. это что, 100500 запросов с наносекунду что-ли?

Kirill
20.03.2018
23:58:29
Вернее не скорость, а время запроса)

The
20.03.2018
23:58:49
сколько юзеров и как часто такие запросы приходят?

Kirill
20.03.2018
23:58:51
Не хочу что бы полсекунды юзер ждал

Юзеров около 7К, не часто

The
20.03.2018
23:59:33
ну пол секунды точно там не будет.

при самом плохом сценарии думаю 20 мс где-то. у меня по 3 млн. товарам по JSON ищет где-то 20 мс.

это не хеш индексы и не принадлежности к множеству.

оптиши потом сколько запрос будет, аж самому интересно

тут скорее рандом подосрет по времени.

можно ещё с джойном поиграться, когда то они были быстрее.

yuriy
21.03.2018
00:19:55
тю, у вас в базе тысячи пользователей можно доставать вообще случайного 1 раз и в 1 / 10000 случаев обращаться к базе еще раз

средний пользователь проголосует за 10 - 100 чел максимум

или вытягивать рандомно 3-5 и из них выбирать за кого не голосовал

tsov
21.03.2018
05:28:44
вот вы даете, рекомендуете человеку на гошанище запросами в sql такое решать! стыдно! я бы сначала спросил, нужна ли ему временная консистентность в базе. и сделал бы через слайс буферизованных каналов. в каналы пишем тех, за кого голосовал каждый, если в кэше на синк-мапе его еще не нашлось. отдельной горутиной шлем в базу.

Страница 1299 из 1674