>백엔드 개발 >Golang >모든 구조를 허용하는 일반 구조

모든 구조를 허용하는 일반 구조

王林
王林앞으로
2024-02-06 08:21:04860검색

모든 구조를 허용하는 일반 구조

질문 내용

모든 구조를 수용하는 보편적인 구조를 만드는 방법은 무엇입니까?

으아악

주요컨텐츠

으아악

오류

package model

type model struct {
    m *interface{}
}

func (m *model) Select(){
    
}

type (
    field struct {
        table   string
        field   string
    }
    fields  map[string]field
)

type User struct {
    schema      string
    fields      fields
}

func NewUser() *interface{} {
    model_user := &User{
        schema: "main",
        
        fields: fields{
            "id":           field{"user","id"},
            "client_id":    field{"user","client_id"},
            "email":        field{"user","email"},
        },
    }
    return model(model_user)
}

정답


정의에 따르면 model 结构似乎存在,用于将 Select() 함수는 모델에 포함된 값에 추가(또는 추가를 시도)합니다.

즉, 구현에서 특정 형식의 유형 스위치를 사용하여 Select() 的能力,并对任何任意类型的值执行某些操作(大概在 Select() 특정 유형의 호출을 원하는 것 같습니다.

그렇다면 interface 并消除 model중개자를 사용하는 것이 더 좋습니다:

으아악

인터페이스 Select(Selectable) 函数是多余的(您可以直接调用 u.Select() ;提供它只是为了说明在需要 Selectable 的情况下可以使用任何类型的值,前提是该类型实现了 Selectable를 찾을 수 있습니다.

interfaces GoLang에서는 덕 타이핑을 제공합니다. 유형이 인터페이스의 계약을 구현하는 경우 구체적인 유형이 사전에 공식적인 인터페이스 정의를 모르더라도 해당 인터페이스를 구현합니다. 즉, “오리처럼 보이고 오리처럼 꽥꽥거린다면 오리이다”입니다.

목적이 User 类型(或其他类型)中删除 Select()ing 的逻辑,并将其隔离在单独的“选择器”中,那么可以通过删除 model 에서 중재하는 것이고 이를 다시 수행하려면 간단히 func를 구현하는 것이라면 유형 변환을 수행하십시오.

으아악

위 내용은 모든 구조를 허용하는 일반 구조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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