掌握Go语言:精通Go语言运算符,解锁编程新境界(11)

算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法等。在Go语言中,我们可以轻松使用这些运算符来进行数值计算,从而实现各种复杂的逻辑操作。让我们一起来深入了解各种算术运算符的使用方法及其在实际开发中的应用。

算术运算符

算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法等。

package mainimport "fmt"func main() {a, b := 10, 5// 加法fmt.Println("Addition:", a+b)  // Output: 15// 减法fmt.Println("Subtraction:", a-b)  // Output: 5// 乘法fmt.Println("Multiplication:", a*b)  // Output: 50// 除法fmt.Println("Division:", a/b)  // Output: 2// 求余fmt.Println("Remainder:", a%b)  // Output: 0
}

赋值运算符

赋值运算符用于给变量赋值,其中 = 表示简单的赋值,而 +=-=*=/=%= 等是复合赋值运算符,表示对变量进行运算后再赋值。

package mainimport "fmt"func main() {a := 10// 简单赋值b := a  // b = 10// 复合赋值b += 5  // b = b + 5,结果为 15b -= 3  // b = b - 3,结果为 12b *= 2  // b = b * 2,结果为 24b /= 4  // b = b / 4,结果为 6b %= 2  // b = b % 2,结果为 0fmt.Println("b:", b)  // Output: 0
}

比较运算符

比较运算符用于比较两个值的大小关系,返回布尔值 truefalse

package mainimport "fmt"func main() {a, b := 10, 5// 等于fmt.Println("Equal:", a == b)  // Output: false// 不等于fmt.Println("Not Equal:", a != b)  // Output: true// 大于fmt.Println("Greater than:", a > b)  // Output: true// 小于fmt.Println("Less than:", a < b)  // Output: false// 大于等于fmt.Println("Greater than or Equal:", a >= b)  // Output: true// 小于等于fmt.Println("Less than or Equal:", a <= b)  // Output: false
}

逻辑运算符

逻辑运算符用于连接多个条件,返回布尔值 truefalse

package mainimport "fmt"func main() {a, b := true, false// 与fmt.Println("Logical AND:", a && b)  // Output: false// 或fmt.Println("Logical OR:", a || b)  // Output: true// 非fmt.Println("Logical NOT:", !a)  // Output: false
}

位运算符

位运算符用于对整数类型的数据进行位操作,包括按位与、按位或、按位异或、左移和右移等。

package mainimport "fmt"func main() {a, b := 5, 3// 按位与fmt.Println("Bitwise AND:", a & b)  // Output: 1// 按位或fmt.Println("Bitwise OR:", a | b)  // Output: 7// 按位异或fmt.Println("Bitwise XOR:", a ^ b)  // Output: 6// 左移fmt.Println("Left Shift:", a << 1)  // Output: 10// 右移fmt.Println("Right Shift:", a >> 1)  // Output: 2
}

其他运算符

地址运算符 & 和指针运算符 *

地址运算符 & 返回变量的内存地址,指针运算符 * 返回指针所指向的变量的值。

package mainimport "fmt"func main() {a := 10var ptr *int// 地址运算符ptr = &afmt.Println("Address of a:", ptr)  // Output: 地址值// 指针运算符fmt.Println("Value at address:", *ptr)  // Output: 10
}
通道运算符 <-

通道运算符 <- 用于发送或接收数据到通道中。

package mainimport "fmt"func main() {ch := make(chan int)// 发送数据到通道go func() {ch <- 10}()// 从通道接收数据val := <-chfmt.Println("Received from channel:", val)  // Output: 10
}

通过深入了解和学习这些运算符的使用方法,读者将能够更好地理解和掌握Go语言中的运算符,从而编写出更加高效和灵活的代码。

位运算符

位运算符用于对整数类型的数据进行位操作,包括按位与、按位或、按位异或、左移和右移等。

package mainimport "fmt"func main() {a, b := 5, 3// 按位与fmt.Println("Bitwise AND:", a & b)  // Output: 1// 按位或fmt.Println("Bitwise OR:", a | b)  // Output: 7// 按位异或fmt.Println("Bitwise XOR:", a ^ b)  // Output: 6// 左移fmt.Println("Left Shift:", a << 1)  // Output: 10// 右移fmt.Println("Right Shift:", a >> 1)  // Output: 2
}

其他运算符

地址运算符 & 和指针运算符 *

地址运算符 & 返回变量的内存地址,指针运算符 * 返回指针所指向的变量的值。

package mainimport "fmt"func main() {a := 10var ptr *int// 地址运算符ptr = &afmt.Println("Address of a:", ptr)  // Output: 地址值// 指针运算符fmt.Println("Value at address:", *ptr)  // Output: 10
}
通道运算符 <-

通道运算符 <- 用于发送或接收数据到通道中。

package mainimport "fmt"func main() {ch := make(chan int)// 发送数据到通道go func() {ch <- 10}()// 从通道接收数据val := <-chfmt.Println("Received from channel:", val)  // Output: 10
}

进销存系统示例

下面是一个简单的进销存系统示例。

package mainimport "fmt"// Product 结构体表示产品信息
type Product struct {ID       intName     stringPrice    float64Quantity int
}// 计算总价值的函数
func calculateTotal(products []Product) float64 {total := 0.0for _, p := range products {total += p.Price * float64(p.Quantity)}return total
}func main() {// 定义产品切片products := []Product{{ID: 1, Name: "手机", Price: 1000, Quantity: 5},{ID: 2, Name: "电脑", Price: 2000, Quantity: 3},{ID: 3, Name: "平板", Price: 800, Quantity: 2},}// 输出当前库存和总价值fmt.Println("当前库存:")for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)}fmt.Printf("总价值为:%.2f\n\n", calculateTotal(products))// 模拟进货操作,增加平板的库存量,并更新总价值for i, p := range products {if p.Name == "平板" {products[i].Quantity += 3 // 增加平板库存3个products[i].Price = 850   // 更新平板价格}}// 输出更新后的库存和总价值fmt.Println("更新后的库存:")for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)}fmt.Printf("更新后的总价值为:%.2f\n", calculateTotal(products))
}

这段代码是一个简单的进销存管理系统示例,用于管理产品信息并计算产品的总价值。下面是对代码的详细解释:

  1. Product 结构体定义:

    type Product struct {ID       intName     stringPrice    float64Quantity int
    }
    

    在这里定义了一个名为 Product 的结构体,用于表示产品的基本信息,包括产品的ID、名称、价格和数量。

  2. calculateTotal 函数:

    func calculateTotal(products []Product) float64 {total := 0.0for _, p := range products {total += p.Price * float64(p.Quantity)}return total
    }
    

    calculateTotal 函数接受一个 Product 结构体的切片作为参数,遍历切片中的每个产品,将每个产品的价格乘以数量累加到 total 变量中,最后返回总价值。

  3. main 函数:

    func main() {// 定义产品切片products := []Product{{ID: 1, Name: "手机", Price: 1000, Quantity: 5},{ID: 2, Name: "电脑", Price: 2000, Quantity: 3},{ID: 3, Name: "平板", Price: 800, Quantity: 2},}// 输出当前库存和总价值fmt.Println("当前库存:")for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)}fmt.Printf("总价值为:%.2f\n\n", calculateTotal(products))// 模拟进货操作,增加平板的库存量,并更新总价值for i, p := range products {if p.Name == "平板" {products[i].Quantity += 3 // 增加平板库存3个products[i].Price = 850   // 更新平板价格}}// 输出更新后的库存和总价值fmt.Println("更新后的库存:")for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)}fmt.Printf("更新后的总价值为:%.2f\n", calculateTotal(products))
    }
    

    main() 函数中,用于管理产品信息和计算产品的总价值。让我们逐步解释其中的内容:

    1. 定义产品切片:

      products := []Product{{ID: 1, Name: "手机", Price: 1000, Quantity: 5},{ID: 2, Name: "电脑", Price: 2000, Quantity: 3},{ID: 3, Name: "平板", Price: 800, Quantity: 2},
      }
      

      在这里,我们定义了一个名为 products 的切片,其中包含了三个产品的信息。每个产品由其ID、名称、价格和数量组成,使用 Product 结构体进行表示。

    2. 输出当前库存和总价值:

      fmt.Println("当前库存:")
      for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)
      }
      fmt.Printf("总价值为:%.2f\n\n", calculateTotal(products))
      

      这部分代码通过循环遍历产品切片 products,并使用 fmt.Printf 函数打印出每个产品的详细信息,包括ID、名称、价格和数量。同时,调用 calculateTotal 函数计算产品的总价值,并将结果打印出来。

    3. 模拟进货操作:

      for i, p := range products {if p.Name == "平板" {products[i].Quantity += 3 // 增加平板库存3个products[i].Price = 850   // 更新平板价格}
      }
      

      这段代码模拟了进货操作,其中使用了 for 循环遍历产品切片 products,并检查每个产品的名称是否为 “平板”。如果是平板,则将该产品的库存数量增加 3 个,并更新其价格为 850。

    4. 输出更新后的库存和总价值:

      fmt.Println("更新后的库存:")
      for _, p := range products {fmt.Printf("ID: %d, 名称: %s, 价格: %.2f, 数量: %d\n", p.ID, p.Name, p.Price, p.Quantity)
      }
      fmt.Printf("更新后的总价值为:%.2f\n", calculateTotal(products))
      

      最后,这部分代码再次循环遍历产品切片 products,并打印出更新后每个产品的信息。同时,调用 calculateTotal 函数计算更新后的产品总价值,并将结果打印出来。

    通过这个示例,展示了如何利用 Go 语言的结构体、切片、函数以及多种运算符来构建简单的进销存管理系统,并对其进行操作和更新。

总结

通过本文的学习,我们深入探讨了如何利用Go语言的丰富特性,包括结构体、切片和多种运算符,实现了一个简单而高效的进销存系统。从产品管理到库存更新,这个示例展示了如何利用Go语言的灵活性和便利性,快速构建出功能完善的应用程序。同时,我们也了解到了如何合理地利用各种运算符,提高代码的可读性和可维护性。通过不断学习和实践,我们可以进一步优化库存管理系统,提升工作效率,实现业务目标的快速达成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg将视频包AVPacket通过视频流方式写入本地文件

1.写视频头 void writeVideoHeader(const char* videoFileName){int r avformat_alloc_output_context2(&pFormatCtx, nullptr, nullptr,videoFileName);if(r < 0){qDebug()<<"Error: avformat_alloc_output_context2: "<<av_err2str(r);return;…

Python 字符串引号 题解

Python 字符串引号 题解 预备知识 在 Python 中&#xff0c;可以使用引号 &#xff0c;" &#xff0c; 和 """来创建字符串。以下都是合法的字符串&#xff1a; aa aa bb "bb" cc cc dd """dd"""配对的引号不…

CloudSecOps实践之路:云安全运营全面解析

云计算已经获得了大量企业用户的青睐&#xff0c;并成为其数字化转型发展的基础&#xff0c;但是也面临着各种各样的风险&#xff0c;从勒索软件到供应链攻击&#xff0c;再到云内部威胁和配置错误&#xff0c;各种云安全事件层出不穷。随着更多的企业将其业务应用迁移至云端&a…

02_electron快速建立项目

一、安装 yarn 在此之前可以先安装 git&#xff1a;Git - Downloads (git-scm.com) 下面就是 yarn 安装的代码&#xff0c;在终端输入即可。 npm install --global yarn 检查是否安装成功&#xff1a; yarn --version 二、快速建立一个electron项目 其实在Getting Started - …

MYSQL Unknown column ‘appreciation.latitude‘ in ‘where clause‘

问题 笔者编写mysql语句&#xff0c;执行报错 详细问题 笔者sql代码 SELECT ap.*, su.username, wh.wheat_name FROM appreciation ap LEFT JOIN sys_user su ON su.id ap.user_id LEFT JOIN wheat wh ON wh.id ap.crop_id WHERE appreciation.latitude 1报错信息 >…

LeetCode707:设计链表

题目描述 实现 MyLinkedList 类&#xff1a; MyLinkedList() 初始化 MyLinkedList 对象。 int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效&#xff0c;则返回 -1 。 void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完…

GO语言-切片底层探索(下)

目录 切片的底层数据结构 扩容机制 总结&#xff1a; 练习验证代码 这是切片的底层探索下篇&#xff0c;上篇地址请见&#xff1a;GO语言-切片底层探索&#xff08;上&#xff09; 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型&#xff0c;会进行…

java关键字是什么?关键字有哪些?什么是常量?

1、关键字 &#xff08;1&#xff09;关键字概述&#xff1a;被java语言赋予了特定含义的单词。 &#xff08;2&#xff09;关键字特点&#xff1a; 关键字的字母全部小写&#xff1b;常用的代码编辑器&#xff0c;针对关键字有特殊的颜色标记&#xff0c;非常直观。 以IDE…

【QT+QGIS跨平台编译】之七十一:【QGIS_Analysis跨平台编译】—【qgsrastercalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

机器学习之分类回归模型(决策数、随机森林)

回归分析 回归分析属于监督学习方法的一种&#xff0c;主要用于预测连续型目标变量&#xff0c;可以预测、计算趋势以及确定变量之间的关系等。 Regession Evaluation Metrics 以下是一些最流行的回归评估指标: 平均绝对误差(MAE):目标变量的预测值与实际值之间的平均绝对差…

在 windows 下安装并调试 CMake

一、前言 CMake是一个跨平台的开源工具&#xff0c;用于管理软件项目的构建过程。它不直接构建软件&#xff0c;而是生成用于特定平台或编译器的构建文件&#xff08;如Makefile或Visual Studio项目文件&#xff09;&#xff0c;然后利用这些文件来实际构建软件。 二、初次尝…

微服务架构 | 架构演进

INDEX 1 架构演进 1 架构演进 standalone 就部署一份 可用性问题&#xff1a;只有一个点&#xff0c;单点故障 全挂流量瓶颈&#xff1a; 只有一个点&#xff0c;可以支持的流量有限性能越高的服务器价格会非线性增加 功能耦合&#xff1a;协同开发困难&#xff0c;各自改一…

大数据开发-Hive介绍以及安装配置

文章目录 数据库和数据仓库的区别Hive安装配置Hive使用方式Hive日志配置 数据库和数据仓库的区别 数据库&#xff1a;传统的关系型数据库主要应用在基本的事务处理&#xff0c;比如交易&#xff0c;支持增删改查数据仓库&#xff1a;主要做一些复杂的分析操作&#xff0c;侧重…

Day34:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行&反序列化链构造 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;…

系统安全与网络攻击

系统安全与网络攻击 Web攻击 XSS 即&#xff08;Cross Site Scripting&#xff09;中文名称为&#xff1a;跨站脚本攻击。XSS的重点不在于跨站点&#xff0c;而在于脚本的执行。 XSS的攻击原理&#xff1a;恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的…

pytorch安装记录

pytorch安装记录 1 安装anconda2 安装pycharm3 安装显卡驱动4 根据显卡驱动版本下载CUDA5 cudnn安装6 根据CUDA版本安装pytorch7 pytorch卸载 1 安装anconda 下载地址: https://www.anaconda.com/download#downloads 验证是否安装成功&#xff1a;打开cmd, 输入 conda 验证环…

基于YOLOv8的手机摄像头的自动检测系统

文章大纲 数据集网络爬虫开源数据集标注目标定义标注标准标注工具标签更换脚本自制数据集下载地址自动检测系统设计与搭建模型训练与准确率代码仓库下载地址参考文献与学习路径随着移动通信技术的飞速发展,消费者对移动终端的要求也越来越高,各厂商纷纷提出自己的特色卖点,其…

华为手机正在重回巅峰

在相对低迷的行业周期之下&#xff0c;2023年下半年智能手机行业迎来了华为的回归&#xff0c;这给本就竞争激烈的市场环境&#xff0c;带来了更大变数。 早在1月29日就有消息称&#xff0c;华为已经注册“星耀手机”品牌商标&#xff0c;定位中端手机市场&#xff0c;但相关消…

django动态表技术(根据日期,年月日)方法二

方法一&#xff1a; 第一步&#xff1a;在models创建一个类&#xff0c;里边存放数据表中需要的字段&#xff0c;如下 class TemplateModel(models.Model):NowTime models.CharField(max_length5)name models.CharFiedld(max_length5)class Meta:abstract True # 基础类设…

从Oracle迁移到openGauss实战分享

介绍 ora2og 是一个将 Oracle 数据库迁移至 openGauss 的工具&#xff0c;主要编程语言为 perl&#xff0c;通过 perl DBI 模块连接 Oracle 数据库&#xff0c;自动扫描并提取其中的对象结构及数据&#xff0c;产生 SQL 脚本&#xff0c;通过手动或自动的方式应用到 openGauss…