代码之家  ›  专栏  ›  技术社区  ›  Brian Leishman

如何将一个值扫描为空而不处理它?

  •  1
  • Brian Leishman  · 技术社区  · 7 年前

    在go中,我试图编写一个工具来处理mysql表的结构,因此我必须使用很多类似于下面的查询

    show keys from`table`where`Key_name`='Primary'
    

    在mysql中,我不能用select命令包装这个命令并选择我想要的列,所以当我只想要一列时(在本例中 Column_name )如何处理不需要的列?因为这个查询还返回所有其他列; Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment, Index_comment 是的。

    在我的go代码中,有这样的行

    err = keysData.Scan(columnName)
    

    如果我能做这样的事就好了

    err = keysData.Scan(_, _, _, _, columnName)
    

    但那不太管用 cannot use _ as value

    我必须为这些不需要的列中的每一列声明丢弃值吗?

    2 回复  |  直到 7 年前
        1
  •  6
  •   Bill Karwin    7 年前

    我会使用信息模式。这比显示键更通用,因为您可以选择单个列。例如:

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_NAME='mytable' AND INDEX_NAME='PRIMARY'
    ORDER BY SEQ_IN_INDEX
    

    https://dev.mysql.com/doc/refman/8.0/en/statistics-table.html

        2
  •  1
  •   dolmen    7 年前

    对于您的用例,我还建议避免使用您的方法,并使用@bill karvin建议的信息模式。

    但要严格回答你的问题,你可以用哑巴 sql.Scanner 总是成功的,但什么也做不了:

    type dummyScanner struct{}
    
    func (dummyScanner) Scan(v interface{}) error {
        return nil
    }
    
    var skip dummyScanner
    
    err = keysData.Scan(skip, skip, skip, skip, columnName, skip, skip, skip, skip, skip, skip, skip, skip)