Heim  >  Artikel  >  Backend-Entwicklung  >  Was das bewirkt: *f = Foo(Wert)

Was das bewirkt: *f = Foo(Wert)

PHPz
PHPznach vorne
2024-02-13 15:10:09629Durchsuche

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

PHP-Editor Zimo ist hier, um Ihnen ein gängiges Codefragment vorzustellen: f = Foo(value). Dieser Code erstellt ein Foo-Objekt mit dem Namen f und übergibt einen Wert als Parameter an seinen Konstruktor. Auf diese Weise können wir das Foo-Objekt im Programm verwenden und bedienen und verarbeiten. Ein Foo-Objekt kann eine Instanz einer Klasse sein, die über verschiedene Eigenschaften und Methoden verfügen kann, mit denen bestimmte Funktionen implementiert werden. Indem wir ein Objekt erstellen und Parameter übergeben, können wir die Eigenschaften des Objekts dynamisch nach Bedarf initialisieren, um die Anforderungen des Programms zu erfüllen. Dies ist ein häufig verwendetes Code-Snippet, das in vielen verschiedenen Programmierszenarien verwendet werden kann.

Frageninhalt

Ich habe die Implementierung der database/sql.Scanner-Schnittstelle gefunden, verstehe sie aber nicht ganz?

Kann kompiliert werden

Der Teil, den ich bekommen habe, war Foo 是一个整数,它有方法 Scan

  1. Scan方法返回error,但是如何返回fmt.Errorf("无效的数据库类型:%T %v", value, value)? Ist das nicht ein Bug oder doch?

  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
}

Lösung

  1. fmt.Errorf(format, args) 返回使用 errors.New(str) 创建的错误值,其中 str ist die Formatzeichenfolge (Ihre Fehlermeldung).

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

Das obige ist der detaillierte Inhalt vonWas das bewirkt: *f = Foo(Wert). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen