Синтаксис кода, разбить строку кода на несколько. Какой оператор?

1,213 views
Skip to first unread message

Den Abr

unread,
Sep 10, 2015, 2:43:04 AM9/10/15
to Golang Russian
Здравствуйте.
С Go начал недавно знакомиться, поэтому возможно задам глупый вопрос:

Имеем строку с запросом из базы данных, произвольной таблицы с множеством столбцов:
err = db.QueryRow("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) returning uid;", "astaxie", "研发部门", "2012-12-09").Scan(&lastInsertId)

Как компактно разместить ее в коде для удобства чтения и редактирования?

пробовал делать следующим образом:

err = db.QueryRow("INSERT INTO userinfo("+
"username"+
",departname"+
",created) VALUES("+
"$1"+
",$2"+
",$3"+
") returning uid;", "astaxie", "研发部门", "2012-12-09").Scan(&lastInsertId)

Daniel Podolsky

unread,
Sep 10, 2015, 3:00:40 AM9/10/15
to gola...@googlegroups.com
> Имеем строку с запросом из базы данных
вот именно строку лучше заключать в обратные апострофы:

var q = `
INSERT INTO t
(id, f)
VALUES
(?,?)
`

plz stop

unread,
Sep 10, 2015, 3:17:35 AM9/10/15
to Golang Russian
вместо
"text" +
"text"
используйте
`text
text`
Message has been deleted

Павел Кочетов

unread,
Sep 23, 2015, 11:11:48 PM9/23/15
to Golang Russian
тут несколько способов:
1)
var query_sql string
query_sql
="INSERT INTO `userinfo` "+
         
"SET `username`=?"

Или так:
var query_sql string
query_sql
=`INSERT INTO userinfo
         SET
username=?`
Но в этом случае 2 минуса: в сам запрос так же попадают знаки переноса строки и отступы слева, а так же если понадобится название поля или таблицы взять в кавычки, придется эти кавычки экранировать. Запрос получится некрасивым. Например, если поле называется `date`, скажем.

2)
var query_sql []string
query_sql
=[]string{
     
"INSERT INTO `userinfo` ",
     
"SET `username`=?"
}

db
.Exec(strings.Join(
query_sql, ""))
Лично для меня этот вариант наиболее правильный. Кроме этого, если количество полей в этом запросе может меняться или если могут меняться условия запроса (WHERE), то можно удобно дополнять массив, не прибегая к конкатенации.

Ещё добавлю, что запросы вида INSERT, UPDATE, DELETE выполнять через db.Exec. А SELECT через Query или QueryRow
А получать LastInsertId так:
var query_sql []string
query_sql
=[]string{
     
"INSERT INTO `userinfo` ",
     
"SET `username`=?"
}

result
, err := db.Exec(strings.Join(
query_sql, ""), "Vasya")
if err != nil {
   
return err
}
last_insert_id
, err :=result.LastInsertId()

if err != nil {
   
return err
}

return nil




четверг, 10 сентября 2015 г., 16:43:04 UTC+10 пользователь Den Abr написал:
Reply all
Reply to author
Forward
0 new messages