首页 > 其他分享 >Go 语言代码简单的在线购物平台:

Go 语言代码简单的在线购物平台:

时间:2023-10-08 22:31:43浏览次数:31  
标签:Product 在线 int 购物 shoppingPlatform item User Go ID

以下是一个相对复杂的 Go 语言代码示例,用于实现一个简单的在线购物平台:

package main

import (
	"fmt"
)

type User struct {
	ID       int
	Name     string
	Email    string
	Password string
	Address  string
}

type Product struct {
	ID    int
	Name  string
	Price float64
}

type CartItem struct {
	Product Product
	Quantity int
}

type Order struct {
	ID         int
	User       User
	TotalPrice float64
	Items      []CartItem
}

type ShoppingPlatform struct {
	Users  map[int]User
	Products map[int]Product
	Orders map[int]Order
}

func main() {
	shoppingPlatform := ShoppingPlatform{
		Users:  make(map[int]User),
		Products: make(map[int]Product),
		Orders: make(map[int]Order),
	}

	// 添加一些用户
	shoppingPlatform.addUser(User{
		ID:       1,
		Name:     "John Smith",
		Email:    "[email protected]",
		Password: "password",
		Address:  "123 Main St",
	})
	shoppingPlatform.addUser(User{
		ID:       2,
		Name:     "Jane Doe",
		Email:    "[email protected]",
		Password: "password",
		Address:  "456 Elm St",
	})

	// 添加一些产品
	shoppingPlatform.addProduct(Product{
		ID:    1,
		Name:  "iPhone 13",
		Price: 999.99,
	})
	shoppingPlatform.addProduct(Product{
		ID:    2,
		Name:  "Samsung Galaxy S21",
		Price: 899.99,
	})

	// 创建一个购物车
	cart := shoppingPlatform.createCart()

	// 向购物车中添加产品
	cart.addProduct(shoppingPlatform.Products[1], 2)
	cart.addProduct(shoppingPlatform.Products[2], 1)

	// 提交订单
	order := cart.checkout(shoppingPlatform.Users[1])
	shoppingPlatform.addOrder(order)

	// 显示用户的订单
	fmt.Printf("%s 的订单:\n", order.User.Name)
	for _, item := range order.Items {
		fmt.Printf("%s - 数量: %d, 单价: %.2f, 小计: %.2f\n", item.Product.Name, item.Quantity, item.Product.Price, item.Quantity*item.Product.Price)
	}
	fmt.Printf("总价格: %.2f\n", order.TotalPrice)
}

func (sp *ShoppingPlatform) addUser(user User) {
	sp.Users[user.ID] = user
}

func (sp *ShoppingPlatform) addProduct(product Product) {
	sp.Products[product.ID] = product
}

func (sp *ShoppingPlatform) createCart() Cart {
	return Cart{}
}

func (sp *ShoppingPlatform) addOrder(order Order) {
	sp.Orders[order.ID] = order
}

func (c *Cart) addProduct(product Product, quantity int) {
	item := CartItem{
		Product: product,
		Quantity: quantity,
	}
	c.Items = append(c.Items, item)
}

func (c *Cart) checkout(user User) Order {
	var totalPrice float64
	for _, item := range c.Items {
		totalPrice += item.Product.Price * float64(item.Quantity)
	}

	order := Order{
		ID:         len(shoppingPlatform.Orders) + 1,
		User:       user,
		TotalPrice: totalPrice,
		Items:      c.Items,
	}

	c.Items = []CartItem{} // 清空购物车

	return order
}

这个代码示例实现了一个简单的在线购物平台,包括用户、产品、购物车和订单的结构体,以及添加用户、产品、创建购物车、添加产品到购物车、提交订单和显示订单的方法。示例中展示了用户在购物平台上选购产品、添加到购物车、提交订单,并打印出订单的详情。希望这个示例能够对您提供一些参考!如果您还有其他问题,请随时提问。

标签:Product,在线,int,购物,shoppingPlatform,item,User,Go,ID
From: https://blog.51cto.com/u_15964895/7762983

相关文章

  • 【最佳实践】MongoDB导入数据时重建索引
    MongoDB一个广为诟病的问题是,大量数据resotore时索引重建非常缓慢,实测5000万的集合如果有3个以上的索引需要恢复,几乎没法成功,而且resotore时如果选择创建索引也会存在索引不生效的问题,种种情况表明,MongoDB的一些默认设置存在明显不合理之处。当然,深入理解后总会有办法解决这些问......
  • golang 使用gomail.v2发送电子邮件
    1packageemail23import(4"errors"5"gopkg.in/gomail.v2"6)78vardialer*gomail.Dialer910funcReset(hoststring,portint,username,passwordstring){11dialer=gomail.NewDialer(host,port,usern......
  • Unity 通信方案 - 使用 Google Protobuf 序列化数据
    1.下载和编译1.1下载ProtoBuf源文件从github下载最新的protoBuf库,如下图所示 Releases·protocolbuffers/protobuf(github.com)1.2编译dll和导入解压后打开/scharp/src中的sln工程文件 选择Release,Google.Protobuf,之后在生成中生成文件在......
  • Django发送邮件
    Django发送邮件在Python中已经内置了一个smtp邮件发送模块,Django在此基础上进行了简单地封装。首先,我们需要在项目的settings文件中配置邮件发送参数,分别如下#使用本地文件作为邮件后端EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'##使用控制台作为......
  • Go - Creating Sets
    Problem: Youwanttocreateasetdatastructure.Solution: Wrapastructaroundamap.Createsetfunctionsonthestruct. Asetisanunordereddatastructurethathasonlyuniqueelements.Itimplementsthemathematicalconceptofafinitesetandt......
  • Go - Creating Stacks
    Problem: Youwanttocreateastackdatastructure.Solution: Wrapastructaroundaslice.Createstackfunctionsonthestruct. Astackisalast-in-first-out(LIFO)orderedlist.Youaddelementsatthetopofthestackandgetelementsfromt......
  • Go - Creating Queues
    Problem: Youwanttocreateaqueuedatastructure.Solution: Wrapastructaroundaslice.Createqueuefunctionsonthestruct. Aqueueisafirst-in-first-out(FIFO)orderedlist.Youaddelementsatthebackofthequeueandgetelementsatt......
  • Django模型及Admin
    Django简介什么是DjangoDjango是一个开源的PythonWeb框架,由DjangoSoftwareFoundation开发和维护。Django的目标是让Web开发更加快速、简单和高效,提供了许多内置的功能和库,如ORM、模板引擎、表单处理、认证、管理后台等。1.2Django的优点及特点高效快速:Django提供了许多......
  • Go复合类型之数组类型
    Go复合类型之数组@目录Go复合类型之数组一、数组(Array)介绍1.1基本介绍1.2数组的特点二、数组的声明与初始化2.1数组声明2.2常见的数据类型声明方法2.3数组的初始化方式一:使用初始值列表初始化数组方法二:根据初始值个数自动推断数组长度方法三:通过指定索引值初始化数组三、......
  • Go with Protobuf
    原文在这里。本教程为Go程序员提供了使用Protocolbuffer的基本介绍。本教程使用proto3向Go程序员介绍如何使用protobuf。通过创建一个简单的示例应用程序,它向你展示了如何:在.proto中定义消息格式使用protocolbuffer编译器使用GoprotocolbufferAPI读写消息这并......