- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
/**
-- name is character varying(64)
CREATE TABLE users
(
id bigint NOT NULL,
no character(24),
identity name,
name name,
head character varying(256),
email character varying(256),
site character varying(256),
create_time timestamp without time zone,
city_id bigint,
timezone jsonb,
update_time timestamp without time zone,
CONSTRAINT user__pk PRIMARY KEY (id)
)
spottly=# SELECT "id", "no", "identity", "name", "head", "email", "site", "create_time", "city_id", "update_time", "timezone" FROM "users" WHERE "email" = 'fixopen@yeah.net' LIMIT 1 OFFSET 0;
id | no | identity | name | head | email | site | create_time | city_id | update_time | timezone
----------------+----+----------+---------+----------------------------------------+------------------+----------------------------+-------------+---------+-------------+----------
95083655397376 | | fixopen | fixopen | /uploader/52e2762edf4e633666000867.png | fixopen@yeah.net | http://spottly.com/fixopen | | | |
(1 row)
*/
package main
import (
"database/sql"
//"errors"
"fmt"
_ "github.com/lib/pq"
"log"
"net/url"
"reflect"
"strings"
"time"
)
type User struct {
Id uint64 `json:"id"`
No *string `json:"no"`
Identity string `json:"identity"`
Name string `json:"name"`
Head url.URL `json:"head"`
Email *string `json:"email"`
Site url.URL `json:"site"`
Create_time time.Time `json:"create-time"`
City_id *uint64 `json:"city-id"`
Update_time time.Time `json:"update-time"`
Timezone *string `json:"timezone"`
}
func main() {
connectionString := "host=localhost port=5432 user=postgres dbname=spottly password=123456 sslmode=disable"
db, err := sql.Open("postgres", connectionString)
defer db.Close()
if err != nil {
log.Fatal(err)
}
t := reflect.TypeOf(User{})
//u := reflect.New(t).Elem().Interface()
//fmt.Printf("u is %T, %#v\n", u, u)
resultValuePtr := reflect.New(t)
resultValue := resultValuePtr.Elem()
fieldCount := t.NumField()
fields := make([]reflect.StructField, fieldCount)
for i := 0; i < fieldCount; i++ {
fields[i] = t.Field(i)
}
columns := make([]string, fieldCount)
fieldAddrs := make([]interface{}, fieldCount)
for i := 0; i < fieldCount; i++ {
columns[i] = strings.ToLower(fields[i].Name)
fieldAddrs[i] = resultValue.Field(i).Addr().Interface()
}
columnNames := strings.Join(columns, "\", \"")
command := "SELECT \"" + columnNames + "\" FROM \"users\" WHERE \"email\" = 'fixopen@yeah.net' LIMIT 1 OFFSET 0"
fmt.Printf("query command is %v\n", command)
// fmt.Printf("meta field is %v\n", fields)
// fmt.Printf("field addr is %#v\n", fieldAddrs)
err = db.QueryRow(command).Scan(fieldAddrs...)
if err == nil {
result := resultValuePtr.Interface()
fmt.Printf("result is %#v\n", result)
} else {
fmt.Printf("Select one error is %v\n", err)
//panic(errors.New("halt"))
}
}
数据库架构和数据显示在评论中。
查询命令为:
SELECT "id", "no", "identity", "name", "head", "email", "site", "create_time", "city_id", "update_time", "timezone"FROM "users"WHERE "email"= 'fixopen@yeah.net' LIMIT 1 OFFSET 0
与注释相同,此命令执行psql
返回一行数据。
sql Scan方法执行错误,输出:
选择一个错误是 sql: Scan error on column index 4: unsupported driver -> Scan pair: []uint8 -> *url.URL
我的golang版本是go version go1.5.2 darwin/amd64
PostgreSQL 版本为 9.4.2
使用 github.com/lib/pq
访问数据库。
是数据库驱动不支持扫描字符串列到url.URL吗?
我能做什么?
最佳答案
url.URL
没有实现 sql.Scanner
, 所以它不能从数据库中扫描。您可以创建一个实现 sql.Scanner
的包装器类型:
type sqlURL struct { url.URL }
func (su *sqlURL) Scan(v interface{}) error {
u, err := url.Parse(string(v.([]byte)))
if err != nil {
return err
}
*su = sqlURL{*u}
return nil
}
或者将URL单独扫描成字符串再解析:
var urlStr string
err = db.QueryRow(command).Scan(/* ... */, &urlStr)
// check err
u, err := url.Parse(urlStr)
// check err
user.Site = *u
关于postgresql - golang reflect for sql scan报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440242/
我正在使用扫描仪检测设备。目前,我的条形码的值为 2345345 A1。因此,当我扫描到记事本或文本编辑器时,输出将类似于 2345345 A1,这是正确的条形码值。 问题是: 当我第一次将条形码扫描
我正在尝试在 Jenkins 的构建后部分运行 Checkmarx Scan。 在我的 Jenkins 工作步骤是--> 1st) 从 SVN Connection 获取源代码到 Checkmarx
我有以下表架构 - CREATE TABLE [dbo].[TEST_TABLE] ( [TEST_TABLE_ID] [int] IDENTITY(1,1) NOT NULL, [N
我有一个关于 postgres 表上的选择的有趣案例: advert (~2.5 million records) id serial, user_id integer (foreig
据我所知,context:component-scan 需要指定 base-package 属性。我如何配置它以扫描类路径中的所有类? 最佳答案 你不知道。那将是一场噩梦。 例如,这意味着加载所有库的
我正在测试不同的查询,我很好奇数据库如何决定使用位图堆扫描和索引扫描。 create index customers_email_idx on customers(email varchar_patt
我在使用中 Swing 不定 import java.util.Scanner; . . . Scanner scan = new Scanner(System.in); . . . Integer.
我有下表 create table log ( id bigint default nextval('log_id_seq'::regclass) not null const
所以我有一个文件要读入,我知道数据将如何列出。例如,我知道每个新行的第一个标记将是 double 。 我一直在使用 Scanner 并且只是使用 scan.nextDouble() 来读取 doubl
在这种情况下,该表有很多文本列,我需要对每一列执行(相似)搜索。我继续为这些列中的每一列创建一个 gin 索引(扩展 pg_trgm 中的 gin_trgm_ops)以加快搜索速度,实际上 yie
我有两个针对 Go 中特定表的查询 - 一个用于检索单个项目,另一个用于返回列表。第一个使用 sql.DB.QueryRow 因为它只需要检索一行,第二个使用 sql.DB.Query 返回几个不同的
添加 StructureMap-MVC3 时打包到 ASP.NET MVC 应用程序, 一个 IoC包含 Initialize 的类添加了包含以下内容的方法(由 App_Start 文件夹中的某些代码
我有以下索引: CREATE INDEX index_c_profiles_on_city_state_name_domain ON c_profiles ((data->>'state'), (da
我在 Postgres 10 中有一个包含 1700 万行和 102 列的表 union_events。我运行命令: CREATE INDEX union_events_index ON temp_s
我以为我知道 Ruby 中的 scan:就好像它在做一个单一的匹配,但对所有结果重复它并放入数组? ruby-1.9.2-p0 > "hello world".scan(/\w{2}/) => ["
我收到此错误并尝试了互联网和 stackoverlow 中可用的所有方法来解决此问题。我试图在使用 sqlx 包连接 MySQL 数据库并扫描结果后运行查询。我已经尝试过针对类似问题共享的解决方案,但
我是 spring 和 Maven 的新手。最近我构建了 spring MVC 项目并使用 maven 来管理项目结构和依赖项。 当我编写单元测试时,我遇到了一个问题,即我无法从“src/main/j
我现在正在尝试 restful api,其中列 SequenceID 不是自动增量,因为故意的,当我像这样计数时,我的问题是库 gorm countSequenceId := db.Debug().T
Scans 当客户端针对表发出扫描时,HBase会为每个区域生成一个RegionScanner对象来提供扫描请求。 该RegionScanner对象包含一个StoreScanner对象列表
我正在构建一个基于浏览器的文档扫描应用程序。我看过多家供应商提供的产品,如 dynamosoft、asprise、atalasoft 等。我对基于浏览器的文档扫描的基本问题是,这些产品中的任何一个都可
我是一名优秀的程序员,十分优秀!