postgres准备查询,列为变量

    var SelectUser, _ = Database.Prepare("SELECT $1 FROM users WHERE id=$2 LIMIT 1;")
    var name string
    SelectUser.QueryRow("name", 1).Scan(&name)

If i do like that i got an error:

runtime error: invalid memory address or nil pointer dereference

But if column is not variable, all ok.

var SelectUser, _ = Database.Prepare("SELECT name FROM users WHERE id=$1 LIMIT 1;")
var name string
SelectUser.QueryRow(1).Scan(&name)

How can I pass columns as variables?

You are ignoring the error of the Database.Prepare statement. If you check the error you will realise, that it fails preparing the sql. The reason why it fails was already answered here by icza:

Golang ORDER BY issue with MySql

Effectively , you can't use variable as field name in a query , you have to pass by a dynamic query.

Try creating a function :

 CREATE OR REPLACE FUNCTION getFieldFromUserById(field_name character varying, id_user integer)
   RETURNS SETOF character varying AS
   $BODY$begin
      return query execute 'SELECT '||field_name||' FROM users  WHERE nart='||id_user||' LIMIT 1';
end
$BODY$
LANGUAGE plpgsql VOLATILE

and your code :

var SelectUser, _ = Database.Prepare("SELECT getFieldFromUserById($1,$2 );")
var name string
SelectUser.QueryRow("name", 1).Scan(&name)