는"동의 인터페이스"휴식을 비 툴?

0

질문

지원되는 방법의 표시 기능으로 사용되지 않는 무언가가 다음과 같다:

type MyStruct struct {
}

// MyFunc returns hello
// Deprecated: Use YourFunc
func (m MyStruct) MyFunc() string {
  return "hello"
}

현대 Ide 강조할 것이 어떤 용도의 기능과 linters 수 있습한 경고(난 개인적으로 확인 이)

Showing the IDE highlight

을 받아들 인터페이스가 있습니다. 익 구조체.

인기 있는 최고의 연습이"동의 인터페이스가 있습니다. 익 구조체." -는 경향이 있을 격려하는 솔리드 디자인에서는 소프트웨어입니다.

다만,다음의 코드는 다음과 같이 최고의 연습-을 은폐용 경고:


// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    MyFunc() string
}

func main() {

    var v MyInterface
    v = MyStruct{}
    v.MyFunc()

}

Showing the lack of IDE highlighting

질문

가 이 문제에 대한 해결책은?

면,예를 들어,라이브러리 관리자:어떻게 확신할 수 있습니는 내단 경고를 볼 수 있으로 사용자의 라이브러리는 또한 다음과 같은 최고의 관행을 정의하고 자신의 종속성을 인터페이스가 있습니다.

1

최고의 응답

3

는 논리적으로 보인 이후 방식의 인터페이스가되지 않은 사용되지 않습니다. 추가 Deprecated: 라인 인터페이스 기능을 도움이 될 수 있 이 경우에는(을 테스트하지 않았기 때문 VSCode 하지 않는 이직).

// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    // Deprecated: use YourFunc
    MyFunc() string
}

기 때문에 이 경우에는 이 인터페이스 단지 1 기능은 당신이해야 사용되지 않습니다. 내가 알고있는 지원 godoc/pkg.이동합니다.개발,취 Queryer 에 대한 예입니다.

// MyInterface specifies a single function that we require from a dependency
// Deprecated: use YourInterface
type MyInterface interface {
    MyFunc() string
}
2021-11-22 21:18:36

하나의 핵심 측면의 질문,그러나"라이브러리로 유지 관리자,어떻게 확신할 수 있습니 나의 사용 중단 통지에 의해 본 최종 사용자에게 유용합니까?" 라이브러리 관리자가 사용자의 인터페이스에 정의를,그래서 그들은 도달할 수 없고 추가 사용 중단 경고 있다.
Brad Johnson

그것은 나에게 이상한 것 같다는 라이브러리 제공하는 구조체 및 이의 사용자 인터페이스를 제공하는 구조체의 라이브러리 구현하고 있습니다. 의 경우 시나리오에 대해 걱정하는 것이 더 똑똑하는 폐기의 전체 구조체는 원인 v = MyStruct{} 가에 시달리는을 통해
caveman

"그것은 나에게 이상한 것 같다는 라이브러리 제공하는 구조체 및 이의 사용자 인터페이스를 제공합니..."하지 않는 것이 무엇인 인터페이스 분리 원칙을 권장?
Brad Johnson

로,인터페이스 분리 원칙은 속보에 대해 큰 인터페이스로 작은 interfeaces 처럼"더 큰 인터페이스,약한 추상화입니다."로 이동 속담입니다. 나는 생각한 종속성 역 원칙은 더 여기에. 당신은 일반적으로 사용하려면 인터페이스를 매개 변수는 실제 구현을 변경할 수 있습니다. 그래서 그것은 논리적 인터페이스를 정의하려면 패키지에 그것을 사용하여 입력할 수 있습니다. 하지만 내가 알지 못하의 모든 일반적인 사용하는 경우 사용자의 패키지 정의하는 인터페이스 라이브러리 구조체를 암시적으로 구현하고 있습니다.
caveman

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................