这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1.什么是go语言
- 高性能,高并发
- 语法简单,学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译 跨平台
- 垃圾回收
2.go语言的安装
1. Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)下载安装包
2.安装完成后用命令行go version 检查安装版本,是否已经完成安装
3.创建环境变量:GOROOT,GOPATH 点击我的电脑-属性-环境变量-新建即可
GOROOT:GO的安装目录
GOPATH:GO语言项目存储的路径 需要包含 src ,pkt, bin三个文件夹
4.利用 go env 来检查环境变量是否配置完成
5.开发工具goland去官网下载即可
3.基础语法理解
3.1利用控制台打印Hello,World!
打印函数在fmt包中,要想使用首先导入fmt包
package main
import "fmt"
func main() {
fmt.Println("Hello World !")
}
3.2swich语法
switch case 选择分支,根据switch后的条件进行选择 注:go中的switch case 选择分支与java,c当中有所不同,go中执行完所选分支之后就会进行退出,而如果分支中没有break,java,c是执行完之后继续向下执行,如果想让go语言中执行完之后继续往下执行的话可以是用fallthough穿透进行无条件继续往下执行
package main
import (
"fmt"
)
func main() {
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
}
3.3切片内容讲解
切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象。 Slice的创建:
var s []int
当想要创建固定长度的Slice时可以用make,例如创建一个长度为8,底层数组为10的整型数组
s:=make([]int,8,10)
Slice的扩展:
- 可以向后扩展,不可以向前扩展
- s[i]不可以超越len(s),向后扩展不可以超过底层数组的cap(s)
package main
import "fmt"
// Slice 切片
//使用Slice 传递的时候这样用 arr[:]
func main() {
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s := arr[2:6]
fmt.Println("s:", s)
fmt.Println("arr[2:6]", arr[2:6])
fmt.Println("arr[2:]", arr[2:])
fmt.Println("arr[:6]", arr[:6])
fmt.Println("arr[:]", arr[:])
//Slice的传递是引用传递
fmt.Println("未更新前的arr[2:6]", arr[2:6])
updateSlice(arr[2:6])
fmt.Println("updateSlice:arr[2:6]", arr[2:6])
updateSlice(arr[:])
fmt.Println("updateSlice arr[:]", arr[:])
//Slice的扩展
fmt.Println("Extending Slice")
s1 := arr[2:6]
s2 := s1[3:5] //s1[0:3] s2相当于s1[3],s1[4],按理说会导致越界
fmt.Println("s1的值为", s1)
fmt.Println("s2的值为", s2)
fmt.Printf("s1=%v,len(s1)=%d,cap(s1)=%d\n",
s1, len(s1), cap(s1))
fmt.Printf("s2=%v,len(s2)=%d,cap(s2)=%d\n",
s2, len(s2), cap(s2))
fmt.Println(s2[:3])
}
func updateSlice(arr []int) {
arr[0] = 100
}
3.4map内容讲解
package main
import "fmt"
// map的使用
func main() {
//map的创建map[k]v
m1 := map[string]string{
"name": "ccmouse",
"course": "goland",
"site": "imooc",
}
m2 := make(map[string]int)
var m3 map[string]int
fmt.Println(m1, m2, m3)
fmt.Println("Traversing map")
//遍历map函数
for s, s2 := range m1 {
fmt.Println(s, s2)
}
fmt.Println("Getting values")
courseName, ok := m1["course"]
fmt.Println(courseName, ok)
if caseName, ok := m1["case"]; ok {
fmt.Println(caseName, ok)
} else {
fmt.Println("key does not exist")
}
//用value ,ok:=m[key]去判别key是否存在
fmt.Println("Deleting values ")
name, ok := m1["name"]
fmt.Println(name, ok)
//用delete可以删除map中的元素
delete(m1, "name")
name, ok = m1["name"]
fmt.Println(name, ok)//打印map函数当中的内容
}
运行结果如下图所示