


In Go, how to define a common interface using factory pattern to handle different parameter types for the same method of different interfaces?
Go language factory mode solves the difference in interface method parameter type
This article discusses how to define a common interface using factory pattern in Go to handle different parameter types of the same method in different interfaces. The challenge of this problem is that multiple interfaces implement the same method, but the parameter types of these methods vary. Using interface{}
or any
type directly will lose type information and reduce code security.
Suppose we have two interfaces IAXX
and IBXX
, both of which contain Create
method, but the parameter types of Create
method are model.AXX
and model.BXX
respectively. In order to define a public interface ICommonInterface
while avoiding type loss, we can adopt factory mode.
The core idea is to create an ICreatorFactory
interface, which is responsible for creating and providing different types of method parameters. The Create
method of ICreator
interface accepts ICreatorFactory
as a parameter, thereby indirectly accepting different types of parameters.
Code example:
package main import "fmt" // Define the model type (assumption) type modelAXX struct { Value string } type modelBXX struct { Value int } // Define factory interface ICreatorFactory type ICreatorFactory interface { GetCreatePayload() interface{} } // Define public interface ICreator type ICreator interface { Create(factory ICreatorFactory) } // IAXX interface implements type IAXX struct{} func (ia *IAXX) Create(factory ICreatorFactory) { payload := factory.GetCreatePayload().(modelAXX) // type assertion fmt.Printf("IAXX Create: % v\n", payload) } // IBXX interface implements type IBXX struct{} func (ib *IBXX) Create(factory ICreatorFactory) { payload := factory.GetCreatePayload().(modelBXX) // type assertion fmt.Printf("IBXX Create: % v\n", payload) } // Factory implementation: Create modelAXX type AXXFactory struct{} func (af *AXXFactory) GetCreatePayload() interface{} { return modelAXX{Value: "Hello from AXX"} } // Factory implementation: Create modelBXX type BXXFactory struct{} func (bf *BXXFactory) GetCreatePayload() interface{} { return modelBXX{Value: 123} } func main() { ia := &IAXX{} ib := &IBXX{} ia.Create(&AXXFactory{}) ib.Create(&BXXFactory{}) }
In this example, AXXFactory
and BXXFactory
implement ICreatorFactory
respectively and return their respective model types. IAXX
and IBXX
securely obtain parameters through type assertions, avoiding the problem of type mismatch. This method maintains the flexibility and scalability of the code and avoids the type safety risks brought about by using interface{}
. It should be noted that the use of type assertions ( .(modelAXX)
) requires ensuring that the incoming factory does return the correct type, otherwise the runtime panic will occur. More robust implementations may require the addition of error handling mechanisms.
The above is the detailed content of In Go, how to define a common interface using factory pattern to handle different parameter types for the same method of different interfaces?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Using the chrono library in C can allow you to control time and time intervals more accurately. Let's explore the charm of this library. C's chrono library is part of the standard library, which provides a modern way to deal with time and time intervals. For programmers who have suffered from time.h and ctime, chrono is undoubtedly a boon. It not only improves the readability and maintainability of the code, but also provides higher accuracy and flexibility. Let's start with the basics. The chrono library mainly includes the following key components: std::chrono::system_clock: represents the system clock, used to obtain the current time. std::chron

The top ten cryptocurrency trading platforms in the world include Binance, OKX, Gate.io, Coinbase, Kraken, Huobi Global, Bitfinex, Bittrex, KuCoin and Poloniex, all of which provide a variety of trading methods and powerful security measures.

MeMebox 2.0 redefines crypto asset management through innovative architecture and performance breakthroughs. 1) It solves three major pain points: asset silos, income decay and paradox of security and convenience. 2) Through intelligent asset hubs, dynamic risk management and return enhancement engines, cross-chain transfer speed, average yield rate and security incident response speed are improved. 3) Provide users with asset visualization, policy automation and governance integration, realizing user value reconstruction. 4) Through ecological collaboration and compliance innovation, the overall effectiveness of the platform has been enhanced. 5) In the future, smart contract insurance pools, forecast market integration and AI-driven asset allocation will be launched to continue to lead the development of the industry.

Bitcoin’s price fluctuations today are affected by many factors such as macroeconomics, policies, and market sentiment. Investors need to pay attention to technical and fundamental analysis to make informed decisions.

The top ten digital currency exchanges such as Binance, OKX, gate.io have improved their systems, efficient diversified transactions and strict security measures.

Recommended reliable digital currency trading platforms: 1. OKX, 2. Binance, 3. Coinbase, 4. Kraken, 5. Huobi, 6. KuCoin, 7. Bitfinex, 8. Gemini, 9. Bitstamp, 10. Poloniex, these platforms are known for their security, user experience and diverse functions, suitable for users at different levels of digital currency transactions

Bitcoin’s price ranges from $20,000 to $30,000. 1. Bitcoin’s price has fluctuated dramatically since 2009, reaching nearly $20,000 in 2017 and nearly $60,000 in 2021. 2. Prices are affected by factors such as market demand, supply, and macroeconomic environment. 3. Get real-time prices through exchanges, mobile apps and websites. 4. Bitcoin price is highly volatile, driven by market sentiment and external factors. 5. It has a certain relationship with traditional financial markets and is affected by global stock markets, the strength of the US dollar, etc. 6. The long-term trend is bullish, but risks need to be assessed with caution.

Currently ranked among the top ten virtual currency exchanges: 1. Binance, 2. OKX, 3. Gate.io, 4. Coin library, 5. Siren, 6. Huobi Global Station, 7. Bybit, 8. Kucoin, 9. Bitcoin, 10. bit stamp.
