
Gleb
25.01.2018
00:00:15
Но я про это не говорю, модель параллелизма в Go мне нравится, всё не плохо. Но вот синтаксис с чисто структурами просто убивает. Я понимаю, что гуглу хотелось иметь язык для студентов, но с нормальным быстродействием и сборщиком мусора. Но шот как-то слишком сильно упростили.

Alexander
25.01.2018
00:03:50
Тот же Docker, который, практически, революцию совершил в девопс

Slava
25.01.2018
00:06:08

Google

Gleb
25.01.2018
00:17:28
Тот же Docker, который, практически, революцию совершил в девопс
Ну тут просто цели гугла и мои немного отличаются) Для docker Go - отличный вариант. Это проект, в который контрьбьютит куча народу, в том числе и индусы непонятную дичь пытаются пропихнуть. Так что простота, низкий порог входа и сложность создания говнокода - на первом месте. Мне бы в своих проектах хотелось бы видеть компактный и красивый код. Короче, понятно. Город засыпает, просыпается костылестроитель ?

Slava
25.01.2018
00:42:22
а как ты узнаёшь что у тебя компактный и красивый код? =)

Gleb
25.01.2018
02:21:02

Marlik
25.01.2018
02:25:48
Нашёл какой-то мануал, пытаюсь на основе его забацать, но чото не выходит, ЧЯДНТ?
https://play.golang.com/p/A10hI26GgZx
Получаю такое: 2018/01/25 05:08:29 sql: database is closed

Slava
25.01.2018
02:48:42
на 26 строке ты закрываешь базу при выходе из функции
поэтому она закрыта

Marlik
25.01.2018
02:49:16

Slava
25.01.2018
02:49:26
а когда дефер выполняется?
https://tour.golang.org/flowcontrol/12

Marlik
25.01.2018
02:50:11
Хм, странно, а где же базу тогда закрывать?

Slava
25.01.2018
02:50:19
можешь в main
сразу же после проверки, что InitDB не вернул ошибку

Marlik
25.01.2018
02:50:56
Оу, спасибо всем, вот не подумал где накосячу.

Google

Slava
25.01.2018
02:51:04
не за что

Андрэ
25.01.2018
05:23:13
Котаны, а много ж кто на Гоконф идёт, да?

tsov
25.01.2018
05:24:36
надо в список грехов добавить прелюбодеяние с языками программирования

Aion
25.01.2018
05:27:53

Андрэ
25.01.2018
05:29:52
https://www.gophercon-russia.ru

Alexey
25.01.2018
05:31:38

Андрэ
25.01.2018
05:32:08
Да, тоже вот купил уже билеты

Marlik
25.01.2018
05:32:32
Блэд, чтож так сложно то с БД? Или это у меня только?))
https://play.golang.com/p/QU3JVW1nEvy
получаю что такой строки нет, а когда через терминалку захожу в базу, то всё нахожу. ЧЯДНТ?

Alexey
25.01.2018
05:33:41
Какая база?

Marlik
25.01.2018
05:34:07

Alexey
25.01.2018
05:35:02
Мб банально не тот файл открываете?
На первый взгляд, всё ок

Marlik
25.01.2018
05:36:55
Мб банально не тот файл открываете?
Да тот, в папке вместе лежит. Сначала инициализирую БД, проверил, всё ок.
func Init() (db *sql.DB, err error) {
db, err = sql.Open("sqlite3", "./data.db")
if err != nil {
log.Fatal(err)
}
if err = db.Ping(); err != nil {
log.Fatal(err)
}
return db, err
}

Dmitriy
25.01.2018
05:38:51
покажи функцию ReturnUser, в примере ReturnChatID

Marlik
25.01.2018
05:39:56
На первый взгляд, всё ок
Я там очепятался. Кажется понял где косяк, выполняю в атоме, не находит, запустил в терминалке вроде чото выдало. Спасибо.

Andrew
25.01.2018
05:40:05

Marlik
25.01.2018
05:40:26

Andrew
25.01.2018
05:41:20
Это как?
var myvar int64
Scan(&myvar)
Зачем использовать структуру DATA, если возвратить нужно только int64? :)

Marlik
25.01.2018
05:42:38
Всем спасибо.

Google

Andrew
25.01.2018
05:43:12
Хм, думаешь atom переватывает данные и крадёт их?!

Marlik
25.01.2018
05:43:50

Andrew
25.01.2018
05:43:56
Разрабов к ответу! Небось они и Half-Life 3 так украли!

Alan
25.01.2018
07:40:44
А кто-нить может подсказать простенький оракловый клиент на go?

Alexander
25.01.2018
07:42:38
а их там два вроде всего было. хз насколько они сложные.
https://github.com/golang/go/wiki/SQLDrivers

Alan
25.01.2018
07:44:16
я вот пробую
https://github.com/rana/ora
просношался с установкой и library_path, вроде бы поставился
но при запуске примера выдает:
ora.Cfg().StmtCfg.SetPrefetchCount undefined (type ora.StmtCfg has no field or method SetPrefetchCount)

Vitalii
25.01.2018
07:50:49

Ivan
25.01.2018
09:23:01
Есть массив со структурами... Допустим беру из массива структуру и в структуре обновляю значение.... Ну так вот, как это сделать что бы не возникло race condition?
не говнокодя))

Linux
25.01.2018
09:23:09
может кто подскажет есть альтернативы opengts на go

Vasily Romanov
25.01.2018
09:27:40

Ivan
25.01.2018
09:29:26

Artem
25.01.2018
09:29:40

Ivan
25.01.2018
09:30:15

Artem
25.01.2018
09:30:44
нет и гоша тут не при чем, блокировать надо если планируется запись

Vasily Romanov
25.01.2018
09:31:09
надо на время чтения

Ivan
25.01.2018
09:31:15
а если во время чтения что то поменяется?
получается что надо, правда можно юзать тогда read блокировку

Vasily Romanov
25.01.2018
09:31:31
если чтение интенсивное - можно исполдьзовать RWMutex

Google

Artem
25.01.2018
09:31:39
и всех сажать в очередь на ожидание пока читает кто то?

Vasily Romanov
25.01.2018
09:31:41
там лок на чтение и запись разделён
чтение не будет блочить всех

Admin
ERROR: S client not available

Artem
25.01.2018
09:32:19
ну значит все круто

Ivan
25.01.2018
09:32:56
окей, значит других штук нету. Спасибо за ответы! Вдруг я что то в документации прошляпил и буду фигарить то что уже есть....

Pawel
25.01.2018
09:38:17
это хипстерская вкусовщина. а не ФП-шный подход

Илья
25.01.2018
09:38:54
Если ты изменяешь поле в структуре, то мутексы можно в структуре держать, а не в массиве, тк лочить весь массив на модификации одного элемента, по-моему не очень

Michael
25.01.2018
11:06:15
Uniform Function Call Syntax из D это вот удобно

Alan
25.01.2018
11:29:07

Michael
25.01.2018
11:38:50
а можешь сслыки с примерами накидать?
там по ссылке есть описание апи, и пакет преднзначен для database/sql/driver, что означает, что надо подключить пакет, задать правильно строку подключения, и работать с общим sql интерфейсом для Go
примеры есть в оф доках

Alan
25.01.2018
11:40:17
а, понел, буду посмотреть стандартный sql)

Александр
25.01.2018
13:00:47
порекомендую вас за 50%!

Alexander
25.01.2018
13:01:35
Рекомендую /report to @twentydraft

25.01.2018
13:18:33
goarch стоит 386, а go build все равно компилит x64
это норма?

Alan
25.01.2018
13:33:12

25.01.2018
13:57:11
Сейчас не за ПК
У меня gcc установлен x86_64
Может просто 32бит накатить?

John
25.01.2018
13:58:09
а причем тут gcc ? :)

Google

25.01.2018
13:58:55


Vitalii
25.01.2018
14:29:40
а можешь сслыки с примерами накидать?
Ну пример простой. Вот так подключаемся к базе:
package models
import (
"database/sql"
"fmt"
"github.com/sirupsen/logrus"
_ "gopkg.in/goracle.v2"
)
var db *sql.DB
func ConnectDB() (*sql.DB, error) {
var err error
dataSourceName := fmt.Sprintf("%s/%s@%s", config.C.Database.User, config.C.Database.Password, config.C.Database.DataSource)
db, err = sql.Open(config.C.Database.Type, dataSourceName)
if err = db.Ping(); err != nil {
return nil, err
}
logrus.Info("Database connection has been established")
return db, err
}
Вот делаем простой инсерт
func InsertHoiTin(req S11Request) error {
query := fmt.Sprintf("INSERT INTO %s.HTLT_HOITIN (TT, NGAYHOI, MSPHIEU, LOAI, MACIC, TENKH, SOCMT, MATCTD, MASP, FECDELIVERY) VALUES (:1, TO_DATE(:2, 'YYYY-MM-DD HH24:MI:SS'), :3, :4, :5, :6, :7, :8, :9, :10 )", config.C.DatabasePrefix)
var params []interface{}
params = append(params, *req.Status)
params = append(params, time.Now().UTC().Format("2006-01-02 15:04:05"))
params = append(params, req.Sys.Unid)
params = append(params, req.Type)
params = append(params, req.CICCode)
params = append(params, req.ClientName)
params = append(params, req.NationalID)
params = append(params, req.FECCICCode)
params = append(params, req.ProductCode)
params = append(params, req.FECDelivery)
_, err := db.Exec(query, params...)
return err
}
Компиляция кода происходит вот в таком контейнере:
FROM golang
LABEL vendor="Vitalii Sharavara"
LABEL description="Golang and Oracle instant client 12.2"
RUN mkdir -p /opt/oracle/
COPY /resources/instantclient_12_2/ /opt/oracle/instantclient_12_2/
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_12_2
ENV ORACLE_HOME /opt/oracle/instantclient_12_2
RUN apt-get update &&\
apt-get install libaio1 &&\
apt-get clean
RUN go get gopkg.in/goracle.v2


Александр
25.01.2018
14:34:57
ой все...

Kirill
25.01.2018
14:52:49

Michael
25.01.2018
14:53:13

Алексей
25.01.2018
15:05:25
Уважаемые знатоки, помогите с такой проблемкой пожалуйста:
type A struct {
...
}
type B struct {
...
}
type C struct {
...
}
func Some(someStruct ){
var asd []someStruct
...
return asd
}
a := Some(A)
b := Some(B)
c := Some(c)
как правильно в функцию переда struct ?

John
25.01.2018
15:06:08

Алексей
25.01.2018
15:06:25

John
25.01.2018
15:06:55
type ISome interface ...

Alan
25.01.2018
15:08:13