Home  >  Article  >  Backend Development  >  Adapter pattern in golang

Adapter pattern in golang

王林
王林forward
2024-02-10 08:40:10909browse

golang 中的适配器模式

The adapter pattern in golang is a commonly used design pattern that can help us convert incompatible interfaces into compatible interfaces. Through adapters, we can achieve interoperability between different systems and different classes, and improve the flexibility and reusability of code. PHP editor Banana will introduce the concept, application scenarios and implementation methods of the adapter pattern in detail in this article to help readers better understand and apply this design pattern. Whether you are a beginner or an experienced developer, you can gain practical knowledge and skills from this article and deepen your understanding of the Golang adapter pattern. Let’s explore this fun and practical design pattern together!

Question content

Trying to create an adapter pattern in golang, not sure what I did wrong. My client.go shows error

c.broker.placeorder undefined (type exchange.exchange has no field or method placeorder)

main.go

package main

import (
    "context"
    "oms/consumer"
)

func main() {
    ctx := context.background()
    consumer.consumer(ctx)
}

consumer.go

package consumer

import (
    "context"
    "fmt"
    "oms/broker"
)

func consumer(ctx context.context) {
    broker.execute()
}

client.go

package broker

import (
    "oms/broker/exchange"
)
type client struct {
    broker exchange.exchange
}

func (c *client) setbroker(broker exchange.exchange) {
    c.broker = broker
}

func (c *client) placeorder(id string, quantity, price int) {
// i am getting error here
    c.broker.placeorder(id, quantity, price)
}

broker.go

package broker

// create a client and set its broker to paytm
import (
    "oms/broker/paytm"
)

func execute() {
    client := &client{}
    client.setbroker(paytm.paytm{ /* fields */ })
    client.placeorder("order1", 10, 100)
}

exchange.go

package exchange

type exchange interface {
    placeorder(id string, quantity, price int)
}

paytm.go

package paytm

import "oms/broker/exchange"

type Paytm struct {
    // fields
}

func (p Paytm) placeOrder(id string, quantity, price int) {
    // implementation for Paytm's placeOrder method
}

Workaround

You are trying to call an unexported method from the broker package. If you want to call this method from outside the paytm package, you should rename it to PlaceOrder in your interface as well as in your method.

More information about exported/unexported fields and methods can be found here: https://golangbyexample.com/exported-unexported-fields-struct-go/

The above is the detailed content of Adapter pattern in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete