>  기사  >  백엔드 개발  >  이것이 하는 일: *f = Foo(값)

이것이 하는 일: *f = Foo(값)

PHPz
PHPz앞으로
2024-02-13 15:10:09629검색

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

PHP 편집자 Zimo는 일반적인 코드 조각인 f = Foo(value)를 소개하기 위해 왔습니다. 이 코드가 하는 일은 f라는 Foo 객체를 생성하고 값을 생성자에 매개변수로 전달하는 것입니다. 이런 식으로 프로그램에서 Foo 객체를 사용하고 이를 연산하고 처리할 수 있습니다. Foo 객체는 특정 기능을 구현하는 데 사용되는 다양한 속성과 메서드를 가질 수 있는 클래스의 인스턴스일 수 있습니다. 객체를 생성하고 매개변수를 전달함으로써 프로그램 요구 사항을 충족하는 데 필요한 객체의 속성을 동적으로 초기화할 수 있습니다. 이는 다양한 프로그래밍 시나리오에서 사용할 수 있는 일반적으로 사용되는 코드 조각입니다.

질문 내용

database/sql.Scanner 인터페이스 구현을 찾았지만 잘 이해가 안 가시나요?

컴파일 가능

내가 받은 부분은 Foo 是一个整数,它有方法 Scan

  1. Scan方法返回error,但是如何返回fmt.Errorf("无效的数据库类型:%T %v", value, value)? 이것은 버그가 아닌가?

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

코드

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
}

솔루션

  1. fmt.Errorf(format, args) 返回使用 errors.New(str) 创建的错误值,其中 str은 형식 문자열(오류 메시지)입니다.

  2. 라인 *f = Foo(value)int64 值转换为 Foo 类型,并将其分配给方法接收者(注意 f은 포인터입니다).

위 내용은 이것이 하는 일: *f = Foo(값)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제