Saya sedang belajar anak panah apache dan ingin mengetahui lebih lanjut tentang cara mencipta rekod skema dan anak panah. Saya telah merujuk beberapa bahan untuk ini, tetapi setakat ini kesemuanya hanya menggunakan jenis primitif untuk membina corak seperti ini: `
schema := arrow.NewSchema( []arrow.Field{ {Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32}, {Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64}, }, nil, )
Sesetengah jenis data tidak wujud dalam jenis primitif yang saya ingin gunakan. Sebagai contoh, saya ingin menggunakan bool atau decimal128. Saya sedang melihat perpustakaan anak panah golang dan menemui fail datatype.go
yang mengandungi semua jenis data yang mungkin saya mahu gunakan.
Tetapi jenis di sini bukanlah jenis datatype
yang diperlukan semasa membina corak.
Jadi, saya ada tiga soalan berikut:
datatype.go
? Jenis data bernama pemalar ini yang ditakrifkan dalam datatype.go
中定义的这些数据类型命名常量已用于创建您想要的新类型的一部分。其中一些是 type decimal128type struct
和 type booleantype struct
如果您检查这些结构的 id
方法的源代码,它们返回在 datatype.go
中定义的常量,其名称与结构的名称相似。这些结构已经实现了 datatype
接口,这意味着您可以将它们分配给 arrow.field.type
因为该字段的类型是 datatype
telah digunakan sebagai sebahagian daripada mencipta jenis baharu yang anda mahukan. Sebahagian daripadanya ialah
dan
Jika anda menyemak kod sumber kaedah id
struktur ini, ia mengembalikan pemalar yang ditakrifkan dalam bool
中定义的常量 datatype.go
在 datatype_fixedwidth.go
中用作 type booleantype struct
的 id
dengan nama yang serupa dengan nama struktur. Struktur ini sudah melaksanakan antara muka
, yang bermaksud anda boleh menetapkannya kepada arrow.field.type
kerana jenis medan ialah func (t *booleantype) id() 类型 { return bool }
.
Apa yang saya maksudkan kepada mereka ialah: type decimal128type struct
Pemalar
yang ditakrifkan dalam bool
digunakan dalam datatype_fixedwidth.go
sebagai nilai pulangan kaedah id
func (*decimal128type) id() 类型 { return decimal128 }
.
datatype
Perkara yang sama berlaku untuk
type decimal128type struct
.
datatype
Kaedah pada salah satu daripada struct ini menunjukkan bahawa mereka sedang melaksanakan antara muka
func (*decimal128type) bitwidth() int func (t *decimal128type) fingerprint() string func (*decimal128type) id() type func (*decimal128type) name() string func (t *decimal128type) string() string
type booleantype struct
Kaedah ini sesuai untuk .
Dan definisi type
antara muka:
type datatype interface { id() type // name is name of the data type. name() string fingerprint() string }
Jadi anda boleh menggunakannya untuk
medan:
type field struct {
name string // field name
type datatype // the field's data type
nullable bool // fields can be nullable
metadata metadata // the field's metadata, if any
}
package main import ( "fmt" "github.com/apache/arrow/go/arrow" ) func main() { booltype := &arrow.booleantype{} decimal128type := &arrow.decimal128type{precision: 1, scale: 1} schema := arrow.newschema( []arrow.field{ {name: "f1-bool", type: booltype}, {name: "f2-decimal128", type: decimal128type}, }, nil, ) fmt.println(schema) }
schema: fields: 2 - f1-bool: type=bool - f2-decimal128: type=decimal(1, 1)
Atas ialah kandungan terperinci Bina skema menggunakan jenis data yang ditentukan dalam datatype.go yang dilaksanakan oleh anak panah apache golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!