모든 구조를 수용하는 보편적인 구조를 만드는 방법은 무엇입니까?
으아악주요컨텐츠
으아악오류
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!