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
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”



