Anonymous
а причем тут gcc ? :)
Проект юзает sqlite, а в нем есть сишный код
Vitalii
а можешь сслыки с примерами накидать?
Ну пример простой. Вот так подключаемся к базе: 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 }
Vitalii
Вот делаем простой инсерт 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 }
Vitalii
Компиляция кода происходит вот в таком контейнере: 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
🏁Александр
ой все...
Kirill
gramework
Спасибо)
Алексей
Уважаемые знатоки, помогите с такой проблемкой пожалуйста: 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 ?
Алексей
Может, интерфейсы ? ...
внутренности структур отличаются
Anonymous
внутренности структур отличаются
нэ. Объявить один тип interface, и передавать его уже в функцию
Anonymous
type ISome interface ...
Andrei 🦉
Уважаемые знатоки, помогите с такой проблемкой пожалуйста: 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 ?
если будешь взаимодействовать со структурами только через методы, описанные в общем интерфейсе, то да, все решается одним общим интерфейсом иначе придется кастить интерфейс в структуры и копипастить код для работы с ними
Andrey
Как go знает сколько памяти выделять под string?
Alexander
https://blog.golang.org/slices
Andrey
То есть если есть struct у которого есть стринговое поле, размер этого стракта будет разный взависимости от того что впихнули в стринг? Или это поле будет поинтером ведущим на аррей который хранится где-то отдельно в памяти?
Alexander
Это поле - структура фиксированного размера, одно из полей которой - указатель на буфер, который уже может быть разной длины у разных строк
Andrey
понял, спасибо
Anonymous
Поинтер всегда фиксированного размера (4 или 8 байт в зависимости от архитектуры), а вот данные на которые он указывает могут быть уже любого размера.
Andrey
Ага, проверил сейчас с помощью unsafe.Sizeof, действительно 8 байт занимает struct, как бы ещё померить сколько занимает struct + все данные одним вызовом, а не по отдельности через len(struct.field)
Alexander
func (item *MyType) Length() int64 { .... } :)
Alexander
А для чего такое нужно?
Andrey
Просто ради интереса :) Наткнулся тут на сайтик интересный http://golang-sizeof.tips/
Алексей
Уважаемые знатоки, есть вопрос... type A struct { Perinods []string } type B struct { A ... } type C struct { A ... } func Some(someStruct A){ var asd []someStruct ... return asd } b := Some(B) c := Some(C) Возможно ли сказать функции, что в аргументы на принимает любую структуру, в которой есть A ? как сложно это объяснить не в терминах ооп -_-
Илья
зачем?
Илья
что вы хотите сделать с []someStruct?
Алексей
в терминах ооп, мне нужно как аргумент принимать любого наследника А
Aleksandr
а сейчас не принимает?
Aleksandr
работай с интерфейсами
Илья
если ты собираешься дальше работать только с методами A, то их можно реализовать (допустим GetPerinods) назвать интерфейс Perinoder, и потом собирать массив, итерироваться и делать что хочешь
Алексей
зачем мне нужно... У меня есть несколько структур которые отличаются внутренностями, но у них всех есть одиннаковое поле, и мне надо принимать на вход любую из этих структур что бы работать с этим параметром, причем мне надо создавать срез точно таких же структур при работе функции
Алексей
Используй интерфейсы
как создать интерфейс с полем?
Aleksandr
Илья
сделай метод, возвращающий поле
Илья
как я писал выше 🙂
Мерль
как создать интерфейс с полем?
Никак, тебе нужно сделать интерфейс с методами для работы с полем
Алексей
эх... понятно...
Мерль
Чтобы получить конкретные типы внутри интерфейса используй type switch
Nikita
как создать интерфейс с полем?
Это же тебе не сишарп какой-то 😃 Никак. Интерфейсы только описывают методы
Nikita
эх... понятно...
Никакой тайпсвитч не нужен. Канонично делать просто так: https://play.golang.org/p/OhPdyAI4bOZ
🎉
Люди, как найти ошибку которую редактор не видит. Выполняю скрипт, он ругается на синтаксическую ошибку. Редактор в упор не видит где, и не подсвечивает. Есть какие-нибудь трюки, модули может? Редактор Atom.
Эмин
Поставь GoLand
Эмин
Он увидет
🎉
Он увидет
Во, точно, у меня стоит, щас гляну.
🎉
Он увидет
И он не видит)) 2018/01/26 06:05:52 near ")": syntax error Process finished with exit code 1
Anonymous
А компилятор номер строки выдаёт?
🎉
Неа. Вот хз как искать, понятно где-то ошибка, вот как найти?
Anonymous
Кидай полный вывод компилятора, чо та падазрительна!
🎉
Нашёл, щас ошибку покажу.
Slava
Может это парсер какой или шаблонизатор
🎉
func InsertUser(db *sql.DB, p *DATA) (lastID int64, err error) { stmt, err := db.Prepare("INSERT INTO data (ChatID, MessageID, StateWhat, PathWhere, ) VALUES (?, ?, ?, ?)") Запятую оставил после PathWhere,
🎉
И ни один редактор не заругался, компилятор не увидел.
Anonymous
Ну так это sql с чего бы им ругаться
🎉
Понятно, значит надо поаакуратнее с SQL.
🎉
А что подразумевается под контекстом? https://golang.org/pkg/database/sql/#DB.QueryContext
Anonymous
QueryRowContext executes a query that is expected to return at most one row. QueryRowContext always returns a non-nil value. Errors are deferred until Row's Scan method is called. If the query selects no rows, the *Row's Scan will return ErrNoRows. Otherwise, the *Row's Scan scans the first selected row and discards the rest.
Anonymous
Так вот же
🎉
Иэээх, было бы на русском.))
Anonymous
В гугл транслэйт загони
Anonymous
В гугл транслэйт загони
> ОНА СО МНОИ, УГЛЕПЛАСТИК. ТАК ОХЛАДИТЕ ТРА****Е, Я РАССМАТРИВАЮ ЕЕ ПОЛЬЗУ
Anonymous
😂
Anonymous
> ОНА СО МНОИ, УГЛЕПЛАСТИК. ТАК ОХЛАДИТЕ ТРА****Е, Я РАССМАТРИВАЮ ЕЕ ПОЛЬЗУ
Да не там вроде перевод так себе, но вроде понятно что к чему
𝒦𝒶𝓁𝒶𝓎⛩
> ОНА СО МНОИ, УГЛЕПЛАСТИК. ТАК ОХЛАДИТЕ ТРА****Е, Я РАССМАТРИВАЮ ЕЕ ПОЛЬЗУ
Сейчас на нейронках транслиты, получше стали перевдоить
Anonymous
Сейчас на нейронках транслиты, получше стали перевдоить
В нейронках нет души. А вот автоматические переводчики переводили так, что мемуары, получившиеся в результате переводов, попали в историю! 😃
Slach
Всем привет а есть способ из var db *sql.DB или из var DSN string вытащить имя базы данных? просто проблема в том, что СУБД разные в sqlite "имя базы данных" вообще отсутсвтует как класс а в clickhouse например может задаваться с именем кластера есть https://github.com/xo/dburl но он наружу выдает в основном url.Path наружу... а его в CREATE DATABASE IF NOT EXISTS не пришить
Anonymous
И с какой БД работаешь? В гугле вижу есть решения для sqlserver и postgres.
Vasiliy
А как ты соединяешься с базой, не зная имени БД?
https://monosnap.com/file/Z8OWI4jXNQ3ImJc4XyWTnz9Sa1thCv ps не удержался :)
Artem
https://golanglibs.com/top?q=dsn
Artem
вот немножно пригорает от терминологии... почему в Гоше делегирование метода называют встраиванием? ну ведь проще было сказать так, как привычно всем, зачем путать то.
Slach
А как ты соединяешься с базой, не зная имени БД?
имя БД в DSN задано не в явном виде
Aleksandr
Slach
DSN кодируется а-ля URL из этого URL protocol+transport://user:password@host:port/вот тут в разных субд РАЗНОЕ!!
Aleksandr
DSN кодируется а-ля URL из этого URL protocol+transport://user:password@host:port/вот тут в разных субд РАЗНОЕ!!
создавая соединение с бд, ты же знаешь что прописываешь в dsn