一、从hello world看语法
//GO语言中保留C语言中的注释方法。
//每个文件必须先声明包,GO语言中以包为管理单位。
//每个工程中只能有一个main包,一个文件夹即为一个工程。
//每个程序必须包含main包,开头处标明即可。
package main
//GO语言中不需要写分号
import ( //通过import导入包,可以导入多个,分行写,用双引号括起来,导入的包必须要用。
"fmt"
)
//定义函数
func main() { //注意这个括号必须和函数名在同一行
fmt.Println("Hello World!") //打印hello world
}
二、命令行指令
go build xxx.go
编译go代码,生成一个可执行程序
然后,运行可执行程序
go run xxx.go
不生成可执行程序,直接运行
cls windows清屏命令
三、变量命名
命名规范:
1)字母、下划线、数字
2)不能以数字开头
3)名字不能是关键字
4)区分大小写
四、变量声明和初始化
package main
import (
"fmt"
)
func main() {
var a int //定义变量a的类型为int
a = 1 //给a赋值为1
var x, y, z int
fmt.Printf("x=%d, y=%d, z=%d\n", x, y, z)
var b int = 2 //定义变量b的;类型为int并赋值为2
var ( //在()内可以同时定义多个变量
c int //定义c的类型为int
d int = 4 //定义d的类型为int并初始化为4
e = 5 //定义变量e的值为5,系统会自动推导e的类型
)
fmt.Printf("a=%d, b=%d, c=%d, d=%d, e=%d\n", a, b, c, d, e)
f := 12 //定义变量f的值为12系统会自动推断f的类型
fmt.Printf("f type is %T\n", f) //%T可以查看值的类型
i, j := 1, 2 //这种方式也可以同时定义多个变量
fmt.Printf("i=%d, j=%d\n", i, j)
//GO语言中有一个匿名变量_
/*
如果一个函数调用后会返回多个值,但是你只需要其中的某个值
匿名变量是个很好的选择
*/
_, i, j = a, b, c
/*
可以同时进行多个变量赋值,可以用于两个变量值的交换
*/
fmt.Printf("i=%d, j=%d\n", i, j)
a1, a2 := 20, 30
a1, a2 = a2, a1
fmt.Printf("a1=%d, a2=%d\n", a1, a2)
}
运行后结果可以看出,c在没有赋值的情况下值为0,GO语言中默认值为0.
五、常量
定义常量时只需要将变量定义中的var替换为const即可
package main
import (
"fmt"
)
func main() {
const a int = 10
const (
c = 20
d = 10.1
)
fmt.Printf("a=%d, c=%d, d=%d\n", a, c, d)
/*
iota常量自动生成器,用于给常量赋值
iota遇到const,重置为0
每使用一次iota的值自增1
*/
const (
x = iota
y = iota
z = iota
)
fmt.Printf("x=%d, y=%d, z=%d\n", x, y, z)
const (
x1 = iota //可以只在第一个常量处赋值,其他常量的值会在上一个常量的基础上自增1
y1
z1
)
fmt.Printf("x1=%d, y1=%d, z1=%d\n", x1, y1, z1)
const (
x2 = iota
y2, z2 = iota, iota //iota如果是同一行,值都一样
)
fmt.Printf("x2=%d, y2=%d, z2=%d\n", x2, y2, z2)
}
六、变量类型
复数取实部虚部的方式:
real(变量) 取实部
imag(变量) 取虚部
类型别名:
type a int //给类型int起别名a
字符单引号
字符串用双引号
七、格式化输出
【1】%d 十进制输出
【2】%c 字符格式输出
【3】%s 字符串格式输出
【4】%T 字符类型
【5】%t bool格式输出
【6】%f 打印浮点数
【7】%v 自动匹配类型,字符类型不匹配
八、运算符
【1】运算符
+ - * / % ++ --
【2】关系运算符
== != >= <= > <
【3】逻辑运算符:
&&与 ||或 !非(取反)
非0就是真,0就是假
【4】位运算符:
& 位与
| 位或
^ 异或
<< 循环左移
>> 循环右移
九、控制语句
1.if语句
package main
import (
"fmt"
)
func main() {
a := 10
if a < 20 {
fmt.Println("a<20")
}
if b := 30; b > 20 { //if 支持一个初始化语句,初始化语句与判断条件以分号隔开
fmt.Println("b>20")
}
if x := 5; x < 5 {
fmt.Println("x<5")
} else {
fmt.Println("x>=5")
}
if c := 40; c < 10 {
fmt.Println("c<10")
} else if c < 20 {
fmt.Println("c<20")
} else if c < 50 {
fmt.Println("c<50")
}
}
2.for语句
package main
import (
"fmt"
)
func main() {
for i := 1; i < 5; i++ { //go语言中for循环不需要加括号
fmt.Println(i)
}
a := "abcd"
for index, key := range a { //go语言可以像python中enumrate,返回a中元素的索引和键值
fmt.Printf("a[%d]=%c ", index, key)
}
for _, key := range a { //可以使用匿名变量
fmt.Println(key)
}
for index := range a {
fmt.Printf("a[%d]=%c ", index, a[index])
}
}
3.switch语句
package main
import (
"fmt"
)
func main() {
a := 10
switch { //可以使用判断语句
case a > 10:
fmt.Println("a > 10")
case a == 10:
fmt.Println("a = 10")
case a < 10:
fmt.Println("a < 10")
default:
fmt.Println("error")
}
c := 20
switch c {
case 10:
fmt.Println("c=", 10)
case 20:
fmt.Println("c=", 20)
default:
fmt.Println("error")
}
switch d := 30; d { //可以有一个初始化语句,用分号隔开
case 10:
fmt.Println("d=", 10)
case 20:
fmt.Println("d=", 20)
case 30:
fmt.Println("d=", 30)
default:
fmt.Println("error")
}
switch e := 90; e {
case 100, 90, 80: //一行可以写多个
fmt.Println("优秀")
case 70, 60:
fmt.Println("合格")
default:
fmt.Println("不及格")
}
}
4.goto语句
package main
import (
"fmt"
)
func main() {
a := 1
Key:
fmt.Printf("Key")
a++
fmt.Printf("%dgoto\n", a)
if a > 3 {
return
}
goto Key
}
十、变量输入
package main
import (
"fmt"
)
func main() {
var a, b, c int
fmt.Println("输入a:")
fmt.Scanf("%d", &a) //输入一和C语言输入一样
fmt.Println("输入b和c:")
fmt.Scan(&b, &c) //第二种方式
fmt.Printf("a=%d, b=%d, c=%d", a, b, c)
}