1.1什么是GO语言
- 高性能,高并发
- 语法简单,学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
1.2 字节跳动为什么全面拥抱Go语言
- 最初使用的Python,由于性能问题换成了Go
- C++不太适合在线Web业务
- 早期团队非Java背景
- 性能比较好
- 部署简单,学习成本低
- 内部RPC和HTTP框架的推广
02 入门
2.1 开发环境-安装Golang-配置集成开发环境-基于云的开发环境
2.2 基础语法-Hello World
package main
import(
"fmt"
)
func main(){
fmt.Println("hello world")
}
2.2基础语法-变量
package main
import(
"fmt"
"math"
)
func main(){
var a = "initial
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
const s string = "constant"
cnost h = 500000000
const i = 3e20 / h
fmt.Println(s, h, math.Sin(h), math.Sin(i))
}
2.3基础语法-if else
与C/C++的区别为if后面没有() if 后必须接{}
2.4基础语法-循环
Go语言里只有for循环
for{}为死循环
for j := 7; j < 9; j++{}
2.5 基础语法-switch
a := 2
switch a{
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3, 4:
fmt.Println("three or four")
default:
fmt.Ptintln("other")
}
Go语言的switch不用break
2.6 基础语法-数组
var a [5]int
b := [5]int{1, 2, 3, 4, 5}
var twoD [2][3]int
2.7基础语法-切片(可变长度的数组)
s := make([]string, 3)
s[0] = "a”
s[1] = "b"
s[2] = "c"
s = append(s, "d")//[a b c d]
c := make([]srting, len(s))
copy(c, s)
2.8 基础语法-map
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m["unknow"])//0
delete(m, one)
m2 := map[string]int{"one":1, "two":2}
var m3 = map[string]int{"one":1, "two":2}
2.9 基础语法-range
nums := []int{2, 3, 4}
sum := 0
for i, num := range nums{
sum += num
if num == 2{
fmt.Println("index:", i, "num:", num)//index:0 num:2
}
}
2.10 基础语法-函数
func add(a, b int) int {
return a + b
}
func exists(m map[string]string, k string)(v string, ok bool){
v, ok = m[k]
return v, ok
}
2.11 基础语法-指针
func add2(n int){
n += 2
}
func add2ptr(n *int){
*n += 2
}
func mian(){
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt.Println(n) // 7
}