>  기사  >  백엔드 개발  >  Go 언어를 사용하여 주문 시스템을 구현하는 방법

Go 언어를 사용하여 주문 시스템을 구현하는 방법

PHPz
PHPz원래의
2023-04-05 13:48:341022검색

이 글에서는 Go 언어를 사용하여 간단하고 이해하기 쉬운 주문 시스템을 구현하는 방법을 소개합니다.

1. 수요 분석

최소한 다음 기능을 구현해야 하는 간단하고 이해하기 쉬운 주문 시스템이 필요합니다.

  1. 상품 표시 및 선택
  2. 장바구니 기능
  3. 생성 및 표시 주문

저희의 시간과 에너지가 제한되어 있다는 점을 고려하여 간이 몰 시스템만 구현하고, 선택할 수 있는 제품은 2개만 제공하겠습니다. 이 두 제품의 정보는 다음과 같습니다.

제품명 제품 가격
제품 1 10위안
제품 2 20위안

우리는 필요합니다 명령을 사용하려면 업계에서 이 쇼핑몰 시스템을 구현하십시오.

2. 코드 구현

  1. 제품 구조 만들기

먼저 제품 정보를 저장할 구조를 만들어야 합니다. 코드 예시는 다음과 같습니다.

type product struct {
    name  string
    price int
}

var products = []product{
    {"商品1", 10},
    {"商品2", 20},
}
  1. 제품 표시

상품 정보 표시, 코드 예시는 다음과 같습니다.

func showProducts() {
    fmt.Println("== 商品列表 ==")
    for _, p := range products {
        fmt.Printf("%s %d元\n", p.name, p.price)
    }
    fmt.Println("================")
}
  1. 장바구니 구현

사용자가 선택한 상품 정보를 저장하기 위해 장바구니 구조를 구현해야 합니다. 코드 예시는 다음과 같습니다.

type cart struct {
    items map[string]int
}

func newCart() *cart {
    return &cart{items: make(map[string]int)}
}

func (c *cart) addItem(name string, qty int) {
    c.items[name] += qty
}

func (c *cart) clear() {
    c.items = make(map[string]int)
}

func (c *cart) total() int {
    total := 0
    for name, qty := range c.items {
        for _, p := range products {
            if p.name == name {
                total += p.price * qty
                break
            }
        }
    }
    return total
}

func (c *cart) show() {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    fmt.Println("== 购物车 ==")
    for name, qty := range c.items {
        fmt.Printf("%s × %d\n", name, qty)
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}
  1. 주문 구현

주문을 구현해야 합니다. 단일 기능은 장바구니에 있는 제품 정보를 주문으로 생성하는 것입니다. 코드 예는 다음과 같습니다.

func checkout(c *cart) {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    // 生成订单
    order := make(map[string]int)
    for name, qty := range c.items {
        order[name] = qty
    }

    // 清空购物车
    c.clear()

    fmt.Println("== 订单详情 ==")
    for name, qty := range order {
        for _, p := range products {
            if p.name == name {
                fmt.Printf("%s × %d\n", name, qty)
                fmt.Printf("单价 %d元,总价 %d元\n", p.price, p.price*qty)
                break
            }
        }
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}
  1. 명령줄 상호 작용

구현해야 합니다. 사용자가 제품과 수량을 선택하고 주문을 완료할 수 있는 명령줄 상호 작용 기능 코드 예시는 다음과 같습니다:

func interactive() {
    scanner := bufio.NewScanner(os.Stdin)
    c := newCart()

    for {
        showProducts()
        c.show()
        fmt.Print("请选择商品(输入商品编号):")
        scanner.Scan()
        id := scanner.Text()
        if id == "q" {
            break
        }

        var p product
        for _, p = range products {
            if p.name == id {
                break
            }
        }
        if p.price == 0 {
            fmt.Printf("商品 %s 不存在\n", id)
            continue
        }

        fmt.Print("请输入数量:")
        scanner.Scan()
        qtyStr := scanner.Text()
        qty, err := strconv.Atoi(qtyStr)
        if err != nil {
            fmt.Println("输入的数量无效")
            continue
        }

        c.addItem(p.name, qty)
    }

    checkout(c)
}

3. 전체 코드

전체 코드는 다음과 같습니다:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

type product struct {
    name  string
    price int
}

var products = []product{
    {"商品1", 10},
    {"商品2", 20},
}

type cart struct {
    items map[string]int
}

func newCart() *cart {
    return &cart{items: make(map[string]int)}
}

func (c *cart) addItem(name string, qty int) {
    c.items[name] += qty
}

func (c *cart) clear() {
    c.items = make(map[string]int)
}

func (c *cart) total() int {
    total := 0
    for name, qty := range c.items {
        for _, p := range products {
            if p.name == name {
                total += p.price * qty
                break
            }
        }
    }
    return total
}

func (c *cart) show() {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    fmt.Println("== 购物车 ==")
    for name, qty := range c.items {
        fmt.Printf("%s × %d\n", name, qty)
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}

func showProducts() {
    fmt.Println("== 商品列表 ==")
    for _, p := range products {
        fmt.Printf("%s %d元\n", p.name, p.price)
    }
    fmt.Println("================")
}

func checkout(c *cart) {
    if len(c.items) == 0 {
        fmt.Println("购物车为空")
        return
    }

    // 生成订单
    order := make(map[string]int)
    for name, qty := range c.items {
        order[name] = qty
    }

    // 清空购物车
    c.clear()

    fmt.Println("== 订单详情 ==")
    for name, qty := range order {
        for _, p := range products {
            if p.name == name {
                fmt.Printf("%s × %d\n", name, qty)
                fmt.Printf("单价 %d元,总价 %d元\n", p.price, p.price*qty)
                break
            }
        }
    }
    fmt.Printf("总计 %d元\n", c.total())
    fmt.Println("============")
}

func interactive() {
    scanner := bufio.NewScanner(os.Stdin)
    c := newCart()

    for {
        showProducts()
        c.show()
        fmt.Print("请选择商品(输入商品编号):")
        scanner.Scan()
        id := scanner.Text()
        if id == "q" {
            break
        }

        var p product
        for _, p = range products {
            if p.name == id {
                break
            }
        }
        if p.price == 0 {
            fmt.Printf("商品 %s 不存在\n", id)
            continue
        }

        fmt.Print("请输入数量:")
        scanner.Scan()
        qtyStr := scanner.Text()
        qty, err := strconv.Atoi(qtyStr)
        if err != nil {
            fmt.Println("输入的数量无效")
            continue
        }

        c.addItem(p.name, qty)
    }

    checkout(c)
}

func main() {
    interactive()
}

4. 요약

이 글에서는 Go 언어를 사용하여 간단하고 이해하기 쉬운 주문 시스템을 구현하는 방법을 간략하게 소개하고, 주문 생성 및 장바구니 기능을 구현하여 실용성을 갖춘 유용한 쇼핑몰 시스템을 구현했습니다. 그리고 참고값. 개발에 앞서 우리는 제품 개발을 더 잘 완료할 수 있도록 요구 사항과 목표를 완전히 이해해야 합니다. 동시에 Go 언어의 효율성과 단순성은 우리에게 안정적이고 효율적인 개발 도구와 지원을 제공합니다.

위 내용은 Go 언어를 사용하여 주문 시스템을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.