一次5-10分钟即可搞定,实用+效率!
回顾一下,上文:go破冰之旅·5·常量、变量、数据类型
提到了go中常量、变量、数据类型这些基础元素,本文来看看go中各种运算符是怎么玩的。
因篇幅及时长关系,本文对算术运算符、赋值运算符、逻辑运算符做了详细介绍和常用用法及特殊案例进行了列举,其余在下一篇中进行介绍。
算术运算符
下面我们以具有特点的示例来对算术运算符进行说明和分析。
import "fmt"func main() {var a, b, c, d inta, b, c, d = 2, 1, 4, 7var (e = 9.9f = 1.1g = 1.11)// 常用四则运算 // fmt.Printf是一个通用打印函数 %v用来做通用参数占位打印fmt.Printf("%v + %v = %v\n", a, b, a+b)fmt.Printf("%v - %v = %v\n", a, b, a-b)fmt.Printf("%v * %v = %v\n", a, b, a*b)fmt.Printf("%v * %v = %v\n", e, f, e*f)fmt.Printf("%v / %v = %v\n", a, b, a/b)fmt.Printf("%v / %v = %v\n", a, c, a/c)fmt.Printf("%v / %v = %v\n", a, d, a/d)fmt.Printf("%v / %v = %v\n", e, f, e/f)fmt.Printf("%v / %v = %v\n", e, g, e/g)fmt.Printf("%v %% %v = %v\n", d, a, d%a) // 求余// 自增和自减a++fmt.Printf("a = %v\n", a)d--fmt.Printf("d = %v\n", d)
}
speed running:
2 + 1 = 32 - 1 = 12 * 1 = 29.9 * 1.1 = 10.892 / 1 = 22 / 4 = 02 / 7 = 09.9 / 1.1 = 99.9 / 1.11 = 8.918918918918927 % 2 = 1a = 3d = 6
可以看出,大多都是我们的预期结果,然而部分结构好像不对?来看看“不对”的行:
2 / 4 = 0
2 / 7 = 0
2除以4我们正常想要的当然是0.5,2除以7=0.2857.....是一串小数,它两的共同特点就是所得结果带有小数点,还有结果可以继续格式化的:
9.9 / 1.11 = 8.91891891891892
我们平时当然需要的是经过精确小数点之后的数,而不是一长串小数点后位数,对如上的情况在做运算时需要进行处理,可移步:go两数相除分析
go中string、float、int等常见类型的转换可移步:go中常见基本类型数值转换方法
话说回来,如果你的功能中2 / 4 需要结果是0的情况,那么就要熟悉此算法的规则,就不需要过度处理。
赋值运算符
尽量避免过多的文字,同样我们直接上代码,在代码中直接直观的看到你想根据基本规则要翻译成的“结果表格”:
// = 最常用的赋值预算符a, b := 1, 2 // 将1和2分别赋值给a和bc := a + b // 新创建变量c,并将a+b的值赋给cfmt.Printf("c = %v\n", c) // 3// += 求和后再赋值、-= 相减后再赋值、*= 相除后再赋值、/= 相除后再赋值、%= 求余后再赋值a += 1 // 相当于a = a+1fmt.Printf("a = %v\n", a) // 2b -= 1 // 相当于b = b-1fmt.Printf("b = %v\n", b) // 1a *= b // 相当于a = a*bfmt.Printf("a = %v\n", a) // 2a /= 2 // 相当于a = a/2fmt.Printf("a = %v\n", a) // 1c %= 2 // 相当于c = c%2fmt.Printf("c = %v\n", c) // 1
逻辑运算符
所谓“逻辑运算符”,就是我们常见的“与”、“或”、“非”,也即“AND”、“OR”、“NOT”,对应在go中的关键符号分别是:&&、||、!
a, b := false, true // a、b分别被设置为“假”、“真”var c bool // 声明一个布尔类型的c,默认为bool类型的零值,也就是falsevar d = true// &&:两个都为真结果才为真//fmt.Printf("%v", a&b) // 注意,单个&表示取址,a&b是不成立的,会提示:Invalid operation: a&b (operator & is not defined on bool)fmt.Printf("a && b = %v\n", a && b)fmt.Printf("a && c = %v\n", a && c)fmt.Printf("b && d = %v\n", b && d)// ||:有一个为真结果就是真fmt.Printf("a || b = %v\n", a || b)fmt.Printf("a || c = %v\n", a || c)fmt.Printf("b || d = %v\n", b || d)// 结果求反运算fmt.Printf("!(a || b) = %v\n", !(a || b))fmt.Printf("!(a || c) = %v\n", !(a || c))fmt.Printf("!(b || d) = %v\n", !(b || d))fmt.Printf("!b = %v\n", !b) // 对b求反,值为false// 多个逻辑运算符,依次运算即可,如有括号,先算括号fmt.Printf("a || b || d = %v\n", a || b || d)fmt.Printf("a || c || d = %v\n", a || c || d)fmt.Printf("a || b && d = %v\n", a || b && d)fmt.Printf("a && b && d = %v\n", a && b && d)fmt.Printf("a || (b && d) = %v\n", a || (b && d))
speed running:
a && b = false
a && c = false
b && d = true
a || b = true
a || c = false
b || d = true
!(a || b) = false
!(a || c) = true
!(b || d) = false
!b = false
a || b || d = true
a || c || d = true
a || b && d = true
a && b && d = false
a || (b && d) = true
这次先到这里,下文继续哦!