这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Go 入门
什么是go语言
- 高性能、高并发
- 语法简单、学习曲线平缓(易上手)
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 快平台
- 垃圾回收
基础语法
Hello World
package main // main 包 代表是可执行
import "fmt" // 负责输入输出的包
func main() { // main方法是入口方法
// 打印字符
fmt.Print("Hello World")
}
变量定义
package main
import (
"fmt"
"math" // 数学计算工具包
)
func main() {
// 声明变量的两种方式 使用 var 或者 :
var a = "initial"
// 变量后面可以跟上变量类型
var b , c int = 1 , 2
var d = true
// 或许可以理解为java中的double 和 float
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b , c , d, e, f)
fmt.Println(g)
// 声明常量
const s string = "constant"
const h = 500000
// 变量右侧依旧可以使用科学计数法和计算表达式
const i = 3e20 / h
fmt.Println(s, h , i, math.Sin(h), math.Sin(i))
}
判断语句
func main() {
if(7 % 2 == 0){ // if 后面加括号不会报错,但是实际上运行时括号也会被去掉
fmt.Println("7 is even")
} else if 7 % 2 != 0 { // 通常不写括号就ok啦
fmt.Println("7 is odd")
} else {
fmt.Println("不会轮到我执行")
}
if num:= 9 ; num < 0 {
fmt.Println("if后面可以定义变量")
} else if num < 10 {
fmt.Println("并且之前if中定义的变量后面判断中依旧能使用,甚至方法体内也可以使用")
fmt.Println(num)
}
//fmt.Print(num) 外界不可以使用
}
循环语句
// 只有for循环了,没有while了
func main() {
i := 1
for j := 7; j < 9; j++ {
fmt.Println("普通循环")
if j % 2 == 0 {
continue // 同样的continue ,跳 过 当前循环
}
if j == 8 {
break // 同样的break ,跳 出 当前循环
}
fmt.Println(j)
}
for i <= 10 {
fmt.Println(i)
i++
fmt.Println(i)
i += 1
fmt.Println(i)
i = i + 1
fmt.Println(i)
fmt.Println(i+1)
//fmt.Println(i++) // i++放在输出里面也会报错
//++i // 没有++i了
}
for {
fmt.Println("我是个死循环")
}
}
switch 分支
func main() {
a := 2
// 不需要break 也不会往下执行
switch a {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
default:
fmt.Println("other")
}
time := time2.Now() // 获取当前时间
// 不传入任何参数,直接跑case里面按顺序判断了,类似if else
switch {
case time.Hour() < 12:
fmt.Println(time, "获取时间太方便了吧","而且都直接把if替代了")
default:
fmt.Println(time,"感觉都类似于else了")
}
}