Maison  >  Article  >  développement back-end  >  Ce que cela fait : *f = Foo(value)

Ce que cela fait : *f = Foo(value)

PHPz
PHPzavant
2024-02-13 15:10:09628parcourir

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

L'éditeur PHP Zimo est là pour introduire un fragment de code commun : f = Foo(value). Ce code crée un objet Foo nommé f et transmet la valeur en tant que paramètre à son constructeur. De cette façon, nous pouvons utiliser l'objet Foo dans le programme, l'exploiter et le traiter. Un objet Foo peut être une instance d'une classe, qui peut avoir diverses propriétés et méthodes utilisées pour implémenter des fonctionnalités spécifiques. En créant un objet et en passant des paramètres, nous pouvons initialiser dynamiquement les propriétés de l'objet selon les besoins pour répondre aux exigences du programme. Il s'agit d'un extrait de code couramment utilisé qui peut être utilisé dans de nombreux scénarios de programmation différents.

Contenu de la question

J'ai trouvé l'implémentation de l'interface database/sql.Scanner, mais je ne la comprends pas bien ?

Peut être compilé

La pièce que j'ai eue était Foo 是一个整数,它有方法 Scan

  1. Scan方法返回error,但是如何返回fmt.Errorf("无效的数据库类型:%T %v", value, value) ? N'est-ce pas un bug ou bien ?

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

Code

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
}

Solution

  1. fmt.Errorf(format, args) 返回使用 errors.New(str) 创建的错误值,其中 str est la chaîne de format (votre message d'erreur).

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer