Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang dilakukan: *f = Foo(nilai)

Apakah yang dilakukan: *f = Foo(nilai)

PHPz
PHPzke hadapan
2024-02-13 15:10:09629semak imbas

这是做什么的:*f = Foo(value)

Editor PHP Zimo di sini untuk memperkenalkan anda kepada serpihan kod biasa: f = Foo(nilai). Apa yang dilakukan oleh kod ini ialah mencipta objek Foo bernama f dan memberikan nilai sebagai parameter kepada pembinanya. Dengan cara ini, kita boleh menggunakan objek Foo dalam program dan mengendalikan serta memprosesnya. Objek Foo mungkin contoh kelas, yang mungkin mempunyai pelbagai sifat dan kaedah yang digunakan untuk melaksanakan fungsi tertentu. Dengan mencipta objek dan lulus parameter, kita boleh memulakan sifat objek secara dinamik mengikut keperluan untuk memenuhi keperluan program. Ini ialah coretan kod yang biasa digunakan yang boleh digunakan dalam banyak senario pengaturcaraan yang berbeza.

Kandungan soalan

Saya menemui pelaksanaan antara muka database/sql.Scanner, tetapi saya tidak begitu memahaminya?

Boleh disusun

Bahagian yang saya dapat ialah Foo 是一个整数,它有方法 Scan

  1. Scan方法返回error,但是如何返回fmt.Errorf("无效的数据库类型:%T %v", value, value)? Bukankah ini pepijat atau adakah ia?

  2. *f = Foo(value) 是做什么的?当您将此类型传递给 rows.Scan() 时,它会调用 Foo.Scan()?如果类型是预期的 int64 它将调用自己 Foo(value)?

Kod

type Foo int

// Scan implements the database/sql.Scanner interface
func (f *Foo) Scan(value interface{}) error {
    switch value := value.(type) {
    case int64:
        *f = Foo(value)
    default:
        return fmt.Errorf("Invalid database type: %T %v", value, value)
    }
    return nil
}

Penyelesaian

  1. fmt.Errorf(format, args) 返回使用 errors.New(str) 创建的错误值,其中 str ialah rentetan format (mesej ralat anda).

  2. garis *f = Foo(value)int64 值转换为 Foo 类型,并将其分配给方法接收者(注意 f ialah penunjuk).

Atas ialah kandungan terperinci Apakah yang dilakukan: *f = Foo(nilai). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam