2013-07-13 3 views
0

Я смотрю на пример кода для Go-SQL-Driverhere:Зачем использовать '=' вместо ': ='?

//Insert 
    stmt, err := db.Prepare("INSERT userinfo SET username=?") 

// Update 
    stmt, err = db.Prepare("update userinfo set username=?") 

Почему в Insert мы используем :=, но в Update мы используем =? Мне кажется, что оба должны быть :=

+4

Что вы думаете ': =' делает? – delnan

+0

Насколько я знаю, 'var x =" hello "и' x: = "hello" 'Это правильно? – Zeynel

ответ

9

:= используется в короткой декларации переменной; он объявляет переменные в левой части и присваивает им. (Это объясняется в the "Short variable declarations" section of The Go Programming Language Specification.)

=, напротив, просто выполняет задания.

В вашем примере вторая строка использует =, потому что переменные уже объявлены (по первой строке), поэтому := не требуется. (На самом деле, это даст сообщение об ошибке: := разрешено только когда, по меньшей мере, одной из переменных «ново», то есть, еще не объявлено.)

5

= является одним из assignement operators.

:= является short variable declaration.

В ссылочных ссылках вы можете обнаружить, что семантика совсем другая, поэтому на самом деле понятие «вместо» немного проблематично.

может быть, полезно mnemotechnic правило:

identifierI := expressionE 

такая же, как

var identifierI = expressionE 

, который так же, как

var identifierI typeOf(expressionE) 
identifierI = expressionE 
0

:= для удобства. Важным отличием является то, что := делает вывод типа, так как он объявляет и присваивает переменной всю одну строку, тип переменных выводится из типа функции возвращаемого значения.

Это делает вашу программу более легкой для чтения в большинстве случаев, но это означает, что кто-то должен будет найти в документе тип возвращаемого значения функции, чтобы выяснить тип переменной.

Вы хотите использовать =, когда вы переустанавливаете существующую переменную или присваиваете глобальную/пакетную переменную из функции, иначе вы создадите новую локальную переменную.

Смежные вопросы