Tôi mới dùng Go và tôi đang cố viết một chương trình nhỏ để lưu các giá trị được liệt kê vào cơ sở dữ liệu. Con đường tôi tuyên bố giá trị của tôi là như sau:Lưu các giá trị được liệt kê vào cơ sở dữ liệu
type FileType int64
const (
movie FileType = iota
music
book
etc
)
tôi sử dụng những giá trị này trong struct của tôi như thế này:
type File struct {
Name string
Type FileType
Size int64
}
tôi sử dụng gorp cho các công cụ cơ sở dữ liệu của tôi, nhưng tôi đoán việc sử dụng gorp không liên quan đến vấn đề của tôi. Tôi đưa công cụ trong DB của tôi như thế này:
dbmap.Insert(&File{"MyBook.pdf",movie,1000})
nhưng khi tôi cố gắng lấy lại những thứ ...
dbmap.Select(&dbFiles, "select * from Files")
tôi nhận được lỗi sau:
panic: reflect.Set: value of type int64 is not assignable to type main.FileType
Khi tôi sử dụng int64
như nhập cho const(...)
và cho trường File.Type
, mọi thứ đều hoạt động tốt, nhưng tôi mới sử dụng Go và muốn hiểu sự cố. Cách tôi nhìn thấy, tôi có hai vấn đề:
- Tại sao không thể Chuyển đổi công cụ này thành công? Tôi đã xem mã nguồn của các gói phản chiếu và sql của Go và có các phương thức cho loại chuyển đổi này, nhưng chúng dường như không thành công. Đây có phải là một lỗi? Vấn đề là gì?
tôi đã tìm ra, mà người ta có thể thực hiện các giao diện
sql.Scanner
bằng cách thực hiện các phương pháp sau đây:Scan(src interface{}) error
Tôi cố gắng để thực hiện phương pháp này và tôi thậm chí đã có thể nhận được giá trị ngay từ
src
và chuyển nó sang aFileType
, nhưng tôi đã nhầm lẫn nếu tôi nên thực hiện phương thức cho "(f *FileType)
hoặc(f FileType)
. Dù cách nào phương thức được gọi, tuy nhiên tôi không thể ghi đèf
(hoặc ít nhất cập nhật bị mất sau này) và các trường hợpFile
đã đọc từ DB luôn có giá trị "0" choFile.Type
.
Bạn có ý tưởng nào về hai điểm đó không?
Đây là câu trả lời đúng và phải được chấp nhận. Lam tôt lăm. – Darrrrrren
Chỉ cần ra khỏi tò mò, tôi là một tổng số newbie đi. Có một lý do tốt để thực hiện điều này một int64? Có vẻ như bạn chỉ cần một int16 hoặc thậm chí int8, vì bạn có thể sẽ không có hàng tỷ giá trị có thể. – bigblind
@bigblind đó là câu hỏi ban đầu được sử dụng. Tôi thường sẽ không bắt đầu lo lắng quá nhiều về kích thước giá trị cho đến khi nó trở thành một vấn đề, hoặc không gian vấn đề đảm bảo nó. –