
Andrey
25.01.2018
16:15:06
Как go знает сколько памяти выделять под string?

Aleksandr
25.01.2018
16:16:26
https://blog.golang.org/slices

Andrey
25.01.2018
16:19:41
То есть если есть struct у которого есть стринговое поле, размер этого стракта будет разный взависимости от того что впихнули в стринг? Или это поле будет поинтером ведущим на аррей который хранится где-то отдельно в памяти?

Alexander
25.01.2018
16:20:33
Это поле - структура фиксированного размера, одно из полей которой - указатель на буфер, который уже может быть разной длины у разных строк

Google

Andrey
25.01.2018
16:21:02
понял, спасибо

Max
25.01.2018
16:23:34
Поинтер всегда фиксированного размера (4 или 8 байт в зависимости от архитектуры), а вот данные на которые он указывает могут быть уже любого размера.

Vladimir
25.01.2018
16:29:15

Andrey
25.01.2018
16:35:39
Ага, проверил сейчас с помощью unsafe.Sizeof, действительно 8 байт занимает struct, как бы ещё померить сколько занимает struct + все данные одним вызовом, а не по отдельности через len(struct.field)

Alexander
25.01.2018
16:37:01
func (item *MyType) Length() int64 { .... } :)
А для чего такое нужно?

Andrey
25.01.2018
16:38:07
Просто ради интереса :) Наткнулся тут на сайтик интересный http://golang-sizeof.tips/

Алексей
25.01.2018
18:54:06
Уважаемые знатоки, есть вопрос...
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 ? как сложно это объяснить не в терминах ооп -_-

Илья
25.01.2018
18:55:49
зачем?
что вы хотите сделать с []someStruct?

Aleksandr
25.01.2018
18:56:29

Алексей
25.01.2018
18:57:25
в терминах ооп, мне нужно как аргумент принимать любого наследника А

Aleksandr
25.01.2018
18:58:29
а сейчас не принимает?

Google

Aleksandr
25.01.2018
18:59:01
работай с интерфейсами

Илья
25.01.2018
18:59:26
если ты собираешься дальше работать только с методами A, то их можно реализовать (допустим GetPerinods) назвать интерфейс Perinoder, и потом собирать массив, итерироваться и делать что хочешь

Алексей
25.01.2018
19:00:09
зачем мне нужно...
У меня есть несколько структур которые отличаются внутренностями, но у них всех есть одиннаковое поле, и мне надо принимать на вход любую из этих структур что бы работать с этим параметром, причем мне надо создавать срез точно таких же структур при работе функции

Мерлин
25.01.2018
19:00:28

Алексей
25.01.2018
19:00:44

Aleksandr
25.01.2018
19:01:04

Илья
25.01.2018
19:01:07
сделай метод, возвращающий поле
как я писал выше ?

Мерлин
25.01.2018
19:01:16

Алексей
25.01.2018
19:01:59
эх... понятно...

Мерлин
25.01.2018
19:02:51
Чтобы получить конкретные типы внутри интерфейса используй type switch

Mykyta
25.01.2018
19:45:58
эх... понятно...
Никакой тайпсвитч не нужен. Канонично делать просто так:
https://play.golang.org/p/OhPdyAI4bOZ

Алексей
25.01.2018
20:01:48

Marlik
26.01.2018
02:43:16
Люди, как найти ошибку которую редактор не видит. Выполняю скрипт, он ругается на синтаксическую ошибку. Редактор в упор не видит где, и не подсвечивает. Есть какие-нибудь трюки, модули может? Редактор Atom.

Эмин
26.01.2018
02:44:13
Поставь GoLand
Он увидет

Marlik
26.01.2018
02:52:35
Он увидет
И он не видит))
2018/01/26 06:05:52 near ")": syntax error
Process finished with exit code 1

Andrew
26.01.2018
03:27:43
А компилятор номер строки выдаёт?

Google

Marlik
26.01.2018
03:30:00
Неа. Вот хз как искать, понятно где-то ошибка, вот как найти?

Andrew
26.01.2018
03:31:41
Кидай полный вывод компилятора, чо та падазрительна!

Marlik
26.01.2018
03:32:57
Нашёл, щас ошибку покажу.

Slava
26.01.2018
03:33:02
Может это парсер какой или шаблонизатор

Marlik
26.01.2018
03:35:04
func InsertUser(db *sql.DB, p *DATA) (lastID int64, err error) {
stmt, err := db.Prepare("INSERT INTO data (ChatID, MessageID, StateWhat, PathWhere, ) VALUES (?, ?, ?, ?)")
Запятую оставил после PathWhere,
И ни один редактор не заругался, компилятор не увидел.

Alexey
26.01.2018
03:39:42
Ну так это sql с чего бы им ругаться

Marlik
26.01.2018
03:41:50
Понятно, значит надо поаакуратнее с SQL.
А что подразумевается под контекстом? https://golang.org/pkg/database/sql/#DB.QueryContext

Alexey
26.01.2018
04:47:21
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.
Так вот же

Marlik
26.01.2018
04:52:24
Иэээх, было бы на русском.))

Alexey
26.01.2018
04:54:27
В гугл транслэйт загони

Andrew
26.01.2018
05:13:12

Alexey
26.01.2018
05:20:34
?

Linux
26.01.2018
05:57:09

Andrew
26.01.2018
05:58:24

Slach
26.01.2018
07:53:07
Всем привет
а есть способ из var db *sql.DB или из var DSN string вытащить имя базы данных?
просто проблема в том, что СУБД разные в sqlite "имя базы данных" вообще отсутсвтует как класс
а в clickhouse например может задаваться с именем кластера
есть https://github.com/xo/dburl
но он наружу выдает в основном url.Path наружу... а его в CREATE DATABASE IF NOT EXISTS не пришить

Andrew
26.01.2018
08:28:06

Google

Andrew
26.01.2018
08:31:25
И с какой БД работаешь? В гугле вижу есть решения для sqlserver и postgres.

Vasiliy
26.01.2018
08:38:11

Artem
26.01.2018
08:39:46
https://golanglibs.com/top?q=dsn
вот немножно пригорает от терминологии... почему в Гоше делегирование метода называют встраиванием? ну ведь проще было сказать так, как привычно всем, зачем путать то.

Slach
26.01.2018
09:12:39

Admin
ERROR: S client not available

Aleksandr
26.01.2018
09:13:22

Slach
26.01.2018
09:13:25
DSN кодируется а-ля URL
из этого URL
protocol+transport://user:password@host:port/вот тут в разных субд РАЗНОЕ!!

Igor
26.01.2018
09:13:29

Aleksandr
26.01.2018
09:14:08

Marlik
26.01.2018
09:15:09
Есть база, есть структура для этой базы. Есть функции которые пишут в базу и читают из неё. Есть как минимум три повторяющиеся функции, для апдейта одного из полей этой базы. Две из них отличаются лишь типами. Вот сижу и думаю как дальше действовать.
1. Сделать функции записи, селекта, апдейта методами структуры, упихать три повторяющиеся функции в интерфейс.
2. Оставить как есть.
3. Что-то ещё.

Slach
26.01.2018
09:17:25
создавая соединение с бд, ты же знаешь что прописываешь в dsn
прописываю не я ;)
я могу только провалидировать через dburl какой нибудь
но вытащить
проблема потому что понятие БД оно РАЗНОЕ для разных СУБД
там где процесс на коннект есть БАЗА в коннекте + СХЕМЫ для имен таблиц
там где тред на коннект есть много БАЗ
а во всяких кластерных есть КЛАСТЕР.БАЗА

Artem
26.01.2018
09:17:50

Aleksandr
26.01.2018
09:18:21

Slach
26.01.2018
09:20:04

Marlik
26.01.2018
09:50:56
Есть база, есть структура для этой базы. Есть функции которые пишут в базу и читают из неё. Есть как минимум три повторяющиеся функции, для апдейта одного из полей этой базы. Две из них отличаются лишь типами. Вот сижу и думаю как дальше действовать.
1. Сделать функции записи, селекта, апдейта методами структуры, упихать три повторяющиеся функции в интерфейс.
2. Оставить как есть.
3. Что-то ещё.

meehalkoff✪
26.01.2018
10:43:00
filepath.Walk(path,
func(path string, info os.FileInfo, err error) error {
if incompleteRegxp.MatchString(path) {
if aacRegxp.MatchString(info.Name()) {
if info.ModTime().Before(currentTime) {
os.Remove(path)
counter++
}
}
}
return nil
})
Это можно как то *красиво * написать?

Alexander
26.01.2018
10:52:50

meehalkoff✪
26.01.2018
10:53:37

Andrew
26.01.2018
10:54:27

Google

meehalkoff✪
26.01.2018
10:54:42
я понял, норм код.

John
26.01.2018
10:55:08
ну вложеность ифов не оч хорошо

Alexander
26.01.2018
10:55:44
да, все условия не обязательно в одну строчку. Можно переносить

John
26.01.2018
10:55:55
if !incompleteRegxp.MatchString(path) {
return
}
if !aacRegxp.MatchString(info.Name()) {
return
}
хотя бы так

Alexander
26.01.2018
10:56:56
filepath.Walk(path,
func(path string, info os.FileInfo, err error) error {
if incompleteRegxp.MatchString(path) &&
aacRegxp.MatchString(info.Name()) &&
info.ModTime().Before(currentTime) {
os.Remove(path)
counter++
}
return nil
})

meehalkoff✪
26.01.2018
10:57:12

John
26.01.2018
10:57:28
valid := ncompleteRegxp.MatchString(path) &&
aacRegxp.MatchString(info.Name()) &&
info.ModTime().Before(currentTime)
if valid

Andrew
26.01.2018
10:57:57
Нужно голосование, какой вариант самый красивый ?

John
26.01.2018
10:58:19
ломает чувство прекрасного смотреть 10 строчек с && и фиг пойми на что вообще условие

meehalkoff✪
26.01.2018
10:59:07
главное что мой вариант не говнокод)
я ж начинающий писатель на го

Александр
26.01.2018
11:14:54

Alexey
26.01.2018
11:15:53
Дерево наверное строит)

meehalkoff✪
26.01.2018
11:16:14