Adapter pattern in golang

王林
Release: 2024-02-10 08:40:10
forward
908 people have browsed it

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)
}
Copy after login

consumer.go

package consumer

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

func consumer(ctx context.context) {
    broker.execute()
}
Copy after login

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)
}
Copy after login

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)
}
Copy after login

exchange.go

package exchange

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

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
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template