虽然变量用于存储应用程序中的数据,但当你开始使用它们构建软件逻辑时,它们才真正发挥作用。操作符是你用来处理软件数据的工具。使用操作符,你可以将数据与其他数据进行比较——例如,你可以检查在交易应用程序中一个价格是否过低或过高。你还可以使用操作符来操作数据。例如,你可以使用操作符将购物车中所有商品的费用相加,得到总价格。
以下是操作符的几种主要类型:
在本练习中,我们将模拟一个餐厅账单。为了完成这项模拟,我们需要使用数学和比较操作符。我们将从探讨操作符的主要用途开始。
在我们的模拟中,我们将计算总账单并根据百分比计算小费。接着,我们会使用比较操作符来判断顾客是否可以获得奖励。开始吧:
package main
import "fmt"
func main() {
// 主菜
var total float64 = 2 * 13
fmt.Println("Sub :", total)
// 饮料
total = total + (4 * 2.25)
fmt.Println("Sub :", total)
// 折扣
total = total - 5
fmt.Println("Sub :", total)
// 10% 小费
tip := total * 0.1
fmt.Println("Tip :", tip)
total = total + tip
fmt.Println("Total:", total)
// 分摊账单
split := total / 2
fmt.Println("Split:", split)
// 每第五次访问获得奖励
visitCount := 24
visitCount = visitCount + 1
remainder := visitCount % 5
if remainder == 0 {
fmt.Println("With this visit, you've earned a reward.")
}
}
go run .
通过本练习,我们演示了如何使用操作符进行各种数学运算和比较。注意保持代码的可读性,如果在实际编程中使用一行语句处理多个变量导致代码难以理解,建议使用更多的代码行以提高可读性。
除了处理数字,某些运算符还可以用于处理字符串。例如,除了对数字进行加法运算,+ 运算符还可以用于连接字符串。以下是一个示例:
package main
import "fmt"
func main() {
givenName := "John"
familyName := "Smith"
fullName := givenName + " " + familyName
fmt.Println("Hello,", fullName)
}
输出结果为:
Hello, John Smith
Go 支持所有常见的位运算符。如果你了解位运算符,那么这部分不会感到陌生。如果你对位运算符不熟悉,也不用担心——它们在实际代码中并不常见。
当你想对一个现有值执行运算时,可以使用一些简写的赋值运算符:
这些简写运算符可以让代码更加简洁。
在本练习中,我们将通过一些运算符简写的示例来展示它们如何使代码更加简洁和易于编写。我们将创建一些变量,并使用简写运算符来修改它们,然后逐步打印结果。开始吧:
package main
import "fmt"
func main() {
count := 5
count += 5
fmt.Println(count)
count++
fmt.Println(count)
count--
fmt.Println(count)
count -= 5
fmt.Println(count)
name := "John"
name += " Smith"
fmt.Println("Hello,", name)
}
go run .
在本练习中,我们使用了几种简写运算符。一组简写运算符用于修改并赋值,这类操作很常见,使用这些快捷方式使编码更加高效。另一组运算符用于递增和递减,这些运算符在循环中逐步处理数据时非常有用。运算符的简写可以让代码的意图更加明确,使代码更容易理解。
接下来,我们将详细探讨如何比较值。
在应用程序中,逻辑决策是通过比较变量的值与定义的规则来实现的。这些规则以比较操作符的形式出现。比较的结果总是布尔值(true 或 false)。通常,我们需要进行多个比较操作才能做出一个决策。为此,我们使用逻辑运算符来帮助实现。
逻辑运算符大多数情况下处理两个值,并且总是返回布尔值。逻辑运算符只能用于布尔值。我们来详细看看比较运算符和逻辑运算符。
比较运算符:
逻辑运算符:
在本练习中,我们将使用比较运算符和逻辑运算符来测试不同条件下的布尔结果。我们要根据用户的访问次数确定他们的会员等级。
我们的会员等级如下:
开始吧:
package main
import "fmt"
func main() {
visits := 15
fmt.Println("First visit :", visits == 1)
fmt.Println("Return visit :", visits != 1)
fmt.Println("Silver member :", visits >= 10 && visits < 21)
fmt.Println("Gold member :", visits > 20 && visits <= 30)
fmt.Println("Platinum member :", visits > 30)
}
go run .
在本练习中,我们使用了比较和逻辑运算符来对数据做出决策。你可以以无限种方式组合这些运算符来表达软件需要的几乎所有逻辑。
接下来,我们将讨论当你不给变量赋初始值时会发生什么。
变量的零值是该变量类型的默认或空值。在 Go 语言中,有一套规则规定了所有核心类型的零值。
虽然还有其他类型,但它们都是从这些核心类型派生的,因此相同的规则仍然适用。
我们将在接下来的练习中查看一些类型的零值。
在这个练习中,我们将定义一些没有初始值的变量,然后打印它们的值。我们将使用 fmt.Printf 来帮助我们,因为它可以提供有关变量类型的更多细节。fmt.Printf 使用一种模板语言,允许我们转换传递的值。我们使用的替换符是 %#v。这种转换是显示变量值和类型的有用工具。
使用 fmt.Printf 时,你需要自行添加换行符。你可以通过在字符串末尾添加 \n 来实现。开始吧:
package main
import (
"fmt"
"time"
)
func main() {
var count int
fmt.Printf("Count : %#v \n", count)
var discount float64
fmt.Printf("Discount : %#v \n", discount)
var debug bool
fmt.Printf("Debug : %#v \n", debug)
var message string
fmt.Printf("Message : %#v \n", message)
var emails []string
fmt.Printf("Emails : %#v \n", emails)
var startTime time.Time
fmt.Printf("Start : %#v \n", startTime)
}
go run .
以下是输出结果:
在这个练习中,我们定义了各种没有初始值的变量类型。然后,我们使用 fmt.Printf 打印它们的值,以揭示更多关于这些值的细节。了解零值及 Go 如何控制这些零值,能帮助你避免错误并编写简洁的代码。
接下来,我们将探讨指针是什么以及它们如何帮助你编写高效的软件。