package main
import (
"fmt"
)
//golang中指针的使用
func main() {
var i int = 10
//i的地址是什么,&i
fmt.Println("i的地址为:", &i) //i的地址为: 0x14000014088
//ptr是一个指针变量,ptr的类型为*int, ptr本身的值为&i
var ptr *int = &i
fmt.Println("ptr:", ptr) //ptr: 0x14000124008
fmt.Println("ptr所指向的值:", *ptr) //ptr所指向的值: 10
}
demo02:通过指针修改所指向地址的值
package main
import (
"fmt"
)
func main() {
var num int = 99
fmt.Println("num的地址:", &num) //num的地址: 0x14000014088
var ptr *int = &num
*ptr = 199
fmt.Println("通过指针修改后的num的值为:", num) //通过指针修改后的num的值为: 199
}
go env -w GO111MODULE=off
再运行main.go即可运行。
运算符介绍:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
对数值类型的变量进行运算,如加减乘除。在go中使用的非常多。
除法的案例:
package main
import (
"fmt"
)
func main() {
//说明,如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
fmt.Println(10 / 4) //2
var n1 float32 = 10 / 4
fmt.Println(n1) //2
//如果我们希望保留小数,则需要浮点数参与运算
var n2 float32 = 10 / 4.0
fmt.Println(n2) //2.5
}
取模的案例:
func main() {
//取模运算
//a % b = a - a / b * b
fmt.Println(10 % 3) //1
fmt.Println(-10 % 3) //-1
fmt.Println(10 % -3) //1
fmt.Println(-10 % -3) //-1
}
++ 和 --的使用案例:
func main() {
//++ 和--
var i int = 11
i++
fmt.Println("i:", i) //i: 12 相当于i = i + 1
i--
fmt.Println("i:", i) //i: 11 相当于i = i - 1
}
func main() {
//++和--只能独立使用
var i int = 8
var a int
a := i++ //错误
a := i-- //错误
if i++ > 0 { //错误
fmt.Println("ok")
}
}
func main() {
var i int = 8
++i //错误
--i //错误
}
func main() {
var days int = 97
fmt.Printf("还剩%d个星期零%d天\n", days/7, days%7) //还剩13个星期零6天
var temp float32 = 33.2
stemp := 5.0 / 9 * (temp - 100)
fmt.Printf("%v 华氏度对应的摄氏度为%v\n", temp, stemp) //33.2华氏度对应的摄氏度为-37.111115
}
介绍:关系运算符的结果都是bool型,要么是true,要么是false;关系表达式经常用在if结构的条件转换或者循环结构的条件中。
func main() {
//演示关系运算符的使用
var n1 int = 9
var n2 int = 10
fmt.Println(n1 == n2) //false
fmt.Println(n1 != n2) //ture
fmt.Println(n1 >= n2) //false
fmt.Println(n1 <= n2) //true
fmt.Println(n1 > n2) //false
fmt.Println(n1 < n2) //true
flag := n1 > n2
fmt.Println(flag) //false
}
介绍:用于连接多个条件(一般来说就是关系表达式),最终的结果也是一个bool值。
与或非,&& || !(和其它语言类似)
demo:
func main() {
//演示逻辑运算符的使用 &&
var age int = 40
if age > 30 && age < 50 {
fmt.Println("ok1")
}
if age > 30 && age < 40 {
fmt.Println("no ok")
}
//输出ok1
//演示逻辑运算符的使用 &&
if age > 30 || age < 50 {
fmt.Println("ok3") //ok3
}
if age > 30 || age < 40 {
fmt.Println("ok4") //ok4
}
//演示逻辑运算符的使用 !
if age > 30 {
fmt.Println("ok5") //仅输出ok5
}
if !(age > 30) {
fmt.Println("ok6")
}
}
package main
import (
"fmt"
)
func test() bool {
fmt.Println("test...")
return true
}
func main() {
//短路与的演示
var i int = 10
if i > 9 && test() {
fmt.Println("ok1")
}
//test...
//ok1
因为i<9为false,所以不执行test()
if i < 9 && test() {
fmt.Println("ok1")
}
//无输出
//短路或的演示
if i < 9 || test() {
fmt.Println("hello")
}
//test...
//hello
//因为i>9为true,所以不执行test(),仅输出hello
if i > 9 || test() {
fmt.Println("hello")
}
//hello
}
介绍:赋值运算符就是将某个运算后的值,赋给指定的变量。
常见的如:=、+=、-=、/=、%=,先进行等号前的运算再赋值,如c+=a 等同于c = c+a。
demo:
func main() {
//赋值运算符的使用
//有两个变量,对其进行交换,打印最终结果
a := 9
b := 3
fmt.Printf("交换前的a:%d,b:%d\n", a, b) //交换前的a:9,b:3
//定义临时变量
t := a
a = b
b = t
fmt.Printf("交换后的a:%d,b:%d\n", a, b) //交换后的a:3,b:9
//复合赋值的操作
a += 20
fmt.Println("a:", a) //23
}
有两个变量,a和b,要求将其进行交换,但是不允许使用中间变量,打印最终结果。
demo:
func main() {
var a int = 5
var b int = 8
//解法1
a, b = b, a
fmt.Printf("a:%v,b:%v\n", a, b) //a:8,b:5
//解法2
a = a + b
b = a - b
a = a - b
fmt.Printf("a:%v,b:%v\n", a, b) //a:5,b:8
}
note:只有单目运算符、赋值运算符是从右向左运算的。
主要有两个&和*,分别为本文第一部分指针相关的取地址和指针取值。
note:go语言不支持三元运算符,只能使用if else替代。
demo:求三个数最大值:
func main() {
var n1 int = 58
var n2 int = 73
var n3 int = 81
var max int
if n1 > n2 && n1 > n3 {
max = n1
} else if n2 > n1 && n2 > n3 {
max = n2
} else {
max = n3
}
fmt.Println("三个数之中最大值为:", max) //三个数之中最大值为: 81
}