该篇笔记是于第六届字节跳动青训营后端基础班学习时,所写笔记,速成go语言的学习心得笔记。
go初体验(hello world)
不管学什么语言,先跑个hello world,都能够大致了解一下这个语言的特点
package main //声明main包,表明是可执行程序
import "fmt" // 导入 fmt 包
func main() { //main方法,主程序
fmt.Println("hello world")//打印输出hello world
}
go基础语法
变量声明(var或:=)
go语言是一门极简语言,所以在声明变量相对于其他语言更为简洁。
在go中可以使用关键词var声明变量,声明变量的语法为var name type = value。其中name为变量名, type为变量类型 (可省略,会自动识别类型),value为变量值(可省略)。
在go中还可以使用:=操作符,进行变量赋值。这种赋值方式只能用于局部变量,不适用于全局变量。类型也是由系统自动识别,是一种极简赋值方式。
常量声明const
常量与变量不同,常量是不可变的值。常量在定义时,必须赋值。
package main
import "fmt"
func main() {
var a = "a字符串"
var b, c int = 1, 2
var d = true
var e float64 // float64,也即我们熟悉的双精度,存储占用8个字节
f := a + "+f字符串" // String 类型 可以直接用 + 号拼接
g := float32(e) // float32,也即我们常说的单精度,存储占用4个字节
fmt.Println(a, b, c, e, d, f, g) //输出: a字符串 1 2 0 true a字符串+f字符串 0
const s string = "const_str"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i) // 输出:const_str 500000000 6e+11
}
if-else、for循环、分支结构switch
在go语言中if-else也是简化了if后的括号,并且能够在if里进行赋值。
在go语言中,循环只有for,没有while,do while,极大的简化了代码,只用for也能满足所有场景。for是允许单独存在,此时就是一个死循环,可以通过break结束循环。
其他语言的switch,如果case后不加break的话,是会继续往下运行剩下的case,在go语言中,是不需要夹break的。而且在go中switch的功能更加强大,可以使用任意的变量类型。
package main
import "fmt"
func main() {
if num := 6; num < 0 {
fmt.Println("num < 0")
} else if num == 0 {
fmt.Println("num = 0")
} else {
fmt.Println("num > 0") //输出 num > 0
}
for i := 0; i < 10; i++ {
fmt.Print(i) //输出 0~9
}
a := 2
switch a {
case 1:
fmt.Print("one")
case 2:
fmt.Print("two") //输出:two
default:
fmt.Print("other")
}
}
切片
切片是可以改变长度的,还可以像数组一样去取值,还可以用append追加元素,扩充容器,相对于其他语言,这更为便捷。
s := make([]string, 3) //创建长度为三的字符串数组
s[0] = "a" //赋值
s[1] = "b"
s[2] = "c"
fmt.Println(s[1:3]) //输出:[b c]
fmt.Println(s[:3]) //输出:[a b c]
fmt.Println(s[1:]) //输出:[b c]
s = append(s, "d") //扩充容器,追加元素
s = append(s, "e", "f") //可同时追加多个元素
fmt.Println(s, len(s)) //输出:[a b c d e f] 6
map集合
在go语言中的map和java的差不多,写法更为简洁,都是key-value的键值对。[“ ”]中的值就是key。通过这个key来对map中的元素增删改查。
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m, len(m)) //输出:map[one:1 two:2] 2
fmt.Println(m["one"]) //输出:1
fmt.Println(m["unknow"]) //输出:0
r, ok := m["one"]
fmt.Println(r, ok) //输出:1 true
delete(m, "one") //删除"one"键值对
range
在go语言中,可以使用range关键词来遍历。如果是数组类型,有两个值接收,一个是当前遍历元素的索引,一个是当前遍历元素的值。如果是集合map的话,一个是当前遍历的key,一个是当前遍历的value。这样的遍历方式较于其他语言,更为简单明了,便于开发。
//数组遍历
arr := []int{1, 2, 3}
for i, num := range arr {
fmt.Println(i, num) //输出:0 1 1 2 2 3
}
//集合遍历
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m { //遍历map
fmt.Println(k, v) //输出:a A b B
}