GO에서 공통 인터페이스를 우아하게 정의하고 인터페이스 구현에서 동일한 방법이지만 다른 매개 변수 유형의 문제를 처리하는 방법은 무엇입니까? 이 기사는 예제를 사용하여 공장 패턴을 사용하여 이러한 문제를 해결하는 방법을 보여줍니다. 두 가지 인터페이스 IAxx
와 IBxx
가 있다고 가정합니다. 둘 다 Create
메소드가 포함되어 있지만 매개 변수 유형은 다릅니다.
interface{}
메소드를 Create
매개 변수로 직접 사용하는 것이 가능하지만 유형 안전이 부족하고 유지 관리하기가 어렵습니다. 이 문제를 해결하기 위해 공장 모델을 소개 할 수 있습니다.
먼저, Create
Method를 포함하는 공개 인터페이스 ICreator
정의하고 매개 변수 유형은 팩토리 인터페이스 ICreatorFactory
입니다. ICreatorFactory
인터페이스는 Create
Method에 필요한 매개 변수를 제공하는 데 도움이됩니다.
패키지 메인 "FMT"가져 오기 // 공개 인터페이스 정의 ICREATOR ICReator 인터페이스 유형 { 생성 (Factory icreatorFactory) } // 팩토리 인터페이스 정의 ICReatOrFactory iCreatorFactory 인터페이스 유형 { getCreatePayLoad () 맵 [Any] }
다음으로 IAxx
및 IBxx
인터페이스 및 해당 공장을 구현하십시오.
// IAXX 인터페이스는 모이를 구현합니다 모이프 구조물 {} 유형 func (a *mpra) create (Factory icreatorFactory) { 페이로드 : = factory.getCreatePayload () fmt.printf ( "Impla Create : %v \ n", 페이로드) // 프로세스 페이로드 } // IAXX Factory는 Modela를 구현합니다 유형 modela struct {} func (a *modela) getCreatePayload () 맵 [Any] 리턴 맵 [uther] { "keya": "valuea"} } // IBXX 인터페이스는 implb를 구현합니다 Implb Struct {} 유형 func (b *implb) create (Factory icreatorFactory) { 페이로드 : = factory.getCreatePayload () fmt.printf ( "implb create : %v \ n", 페이로드) // 프로세스 페이로드 } // IBXX Factory는 ModelB를 구현합니다 유형 Modelb struct {} func (b *modelb) getCreatePayload () 맵 [Any] 리턴 맵 [Any] { "keyb": 123} }
main
기능에서는 공장을 통해 다른 객체를 만들 수 있습니다.
func main () { Impa : = & Impa {} Impra.create (& modela {}) Implb : = & implb {} implb.create (& modelb {}) }
이러한 방식으로, 우리는 공장 패턴을 사용하여 각 공장 구현에서 다양한 매개 변수 유형의 생성 로직을 캡슐화합니다. ICreator
인터페이스의 Create
메소드의 매개 변수 유형은 일관되므로 코드 유연성 및 확장 성을 유지하면서 일관되지 않은 매개 변수 유형의 문제를 해결합니다. map[any]any
특정 유형 안전을 희생하지만 다양한 매개 변수 유형을 처리하기에 충분한 유연성을 제공합니다. 더 엄격한 유형 검사는 ImplA
및 ImplB
Create
메소드 내에서 구현할 수 있습니다.
위 내용은 Go Language에서 공장 모드를 통해 다른 공개 메소드 매개 변수 유형의 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言能编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言。对Go语言程序进行编译的命令有两种:1、“go build”命令,可以将Go语言程序代码编译成二进制的可执行文件,但该二进制文件需要手动运行;2、“go run”命令,会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

드림위버 CS6
시각적 웹 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
