Go
运行
package main
import "fmt"
func main() {
fmt.Printf("hello world")
}
- 输入
go build
会编译出一个exe文件,然后运行 go run main.go
直接输出hello world
格式化打印
可以使用Printf
来控制打印的输出结果
Printf
的第一个参数必须是字符串
其中这个字符串可能包含像%v
的格式化动词,它的值有第二个参数所替代
还可以使用
Printf
来对其文本,如%4v
,向左填充4个宽度正数向左填充,负数向右填充
常量变量
- const 常量
- var 变量
声明多个变量或常量
-
var a = 10 var b = 20
-
var ( a = 10 b = 20 )
-
var a, b = 10, 20
自增运算符(与java不同)
go语言里没有++count
循环和分支
switch(与java不同)
fallthrough
关键字,用来执行下一个case的body部分
func main(){
var num = 12
switch{
case num == 13:
fmt.Println("第一个")
case num == 12:
fmt.Println("第二个")
fallthrough
case num == 14:
fmt.Println("第三个")
}
}
第二个
第三个
循环(与java不同)
for后面没有跟条件就会无限循环
猜数
func main(){
const tmp = 20
var random = 0
var n = 0
for{
n++
random = rand.Intn(100)
if tmp < random {
fmt.Println("大")
fmt.Println(random)
continue
}
if tmp > random {
fmt.Println("小")
fmt.Println(random)
continue
}
if tmp == random {
fmt.Println("结束" , n,"次",random)
break
}
}
}
变量和作用域
短声明
可以使用var来声明变量var count = 10
,但是也可以使用短声明count := 10
,效果相同。
短声名不能声明package作用域的变量
好处:是代码更短,可以在不能使用var的情况下使用
//正常声名
var count = 0
for count = 10;count > 0; count --{
fmt.Println(count)
}
//短声名
for count := 10;count > 0; count --{
fmt.Println(count)
}
//短声名
if num := rand.Intn(3); num == 0 {
fmt.Println("0")
}else if num == 1 {
fmt.Println("1")
}else {
fmt.Println("2")
}
switch num := rand.Intn(3); num{
case 0:
fmt.Println(0)
case 1:
fmt.Println(0)
case 2:
fmt.Println(0)
}
实数
浮点数
声明浮点型变量
- 只要数字含有小数部分,类型就是float64
- 如果使用整数来初始,就必须指定
var count float64 = 42
浮点数类型
- float64(默认)
- 64位,占用8字节
- 双精度类型
- float32
- 占用4字节,精度比float64低
- 单精度类型
单精度
要想使用单精度,必须声名
整数
go提供了10种整数类型,5种有符号类型int
,5种无符号类型uint
与架构无关是8种:
类型 | 取值范围 | 内存 |
---|---|---|
int8 | -128 至 127 | 1字节 |
uint8 | 0 至 255 | 1字节 |
int16 | -32768 至 32767 | 2字节 |
uint16 | 0 至 65535 | 2字节 |
int32 | -2147483648 至 2147483647 | 4字节 |
uint32 | 0 至 4294967295 | 4字节 |
int64 | -9223372036854775808 至 9223372036854775807 | 8字节 |
uint64 | 0 至 18446744073709551615 | 8字节 |
int和uint是针对目标设备优化的类型:
- 树莓派或者老设备上,为32位
- 新设备为64位
整数环绕
整数类型虽然不会像浮点类型那样因为舍入错误而导致不精确,但整数类型也有它们自己的问题,那就是有限的取值范围。在Go语言中,当超过整数类型的取值范围时,就会出现整数回绕(wrap around)现象。
例如,8位无符号整数uint8类型的取值范围为0~255,而针对该类型的增量操作在结果超过255时将回绕至0。
var red uint8 = 255
red++
fmt.Println(red) ←--- 打印出“0”
var number int8 = 127
number++
fmt.Println(number) ←--- 打印出“-128”
时,就会出现整数回绕(wrap around)现象。
例如,8位无符号整数uint8类型的取值范围为0~255,而针对该类型的增量操作在结果超过255时将回绕至0。
var red uint8 = 255
red++
fmt.Println(red) ←--- 打印出“0”
var number int8 = 127
number++
fmt.Println(number) ←--- 打印出“-128”