golang MariaDB IN句へ配列データの渡し方

1.(1)の方法だと、渡す値に’-‘を含むと値を正しく渡せない
(1)配列をJOINした文字列を”{” +…+ “}”で括ってIN句に渡す方法
(2)配列データの数だけ?をSQLのIN句に埋め込んで、値を配列で渡す方法

2.2種類の方法
(1)配列をJOINした文字列を”{” +…+ “}”で括ってIN句に渡す方法
“{‘”+strings.Join(user_ids , “‘,'”)+”‘}”

SQL = `
   SELECT
   user_id,
      email_address AS username
   FROM
      user_authentication
   WHERE
      user_id NOT IN(?)
`;

s :=bytes.NewBufferString("");
s.WriteString(SQL);
rows, err = db.Query(s.String(), "{'"+strings.Join(user_ids , "','")+"'}");

(2)配列データの数だけ?をSQLのIN句に埋め込んで、値を配列で渡す方法
・uuidsはstringの配列
・repeat := strings.Repeat(“?,”, len(uuids)-1) +”?” で配列データの数だけ?を作成
・db.Queryの引数はtype []interface {}なので、rangeとappendで、stringの配列からtype変換する

repeat := strings.Repeat("?,", len(uuids)-1) +"?"

var args []interface {};
for _, tag := range uuids {
    args = append(args, tag)
}

SQL := `
   SELECT
      sub_id AS uuid
   FROM
      bills
   WHERE
      sub_id IN ( `+repeat+` )
`;

s := bytes.NewBufferString("");
s.WriteString(SQL);
 rows, err := db.Query(s.String(),args... );