这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
go语言简介
1.1什么是GO语言?
- 高并发高性能
- 语法简单、学习路线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
1.2ByteDance为何选择GO?
- 性能问题
- c++不适合在线web业务
- 早期团队不是java背景
- 性能比较好
- 部署简单、学习成本低
- 内部RPC和HTTP框架的推广
GO入门
这部分简单介绍,多是java与go的不同点
2.1helloworld程序
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
2.2变量
如果定义的变量没有被使用,那么就不要定义,不然会报错!
go语言是强类型语言,有字符串、整形、浮点型、布尔型等
字符串之间可以用等于号来比较
package main
import "fmt"
func main() {
var a = "asdfasdf"
var a2 = "asdasda"
var b float64 = 11.2
var c int = 2
d := 4.5 //第二种变量定义方式
fmt.Println(a == a2)
fmt.Println(b + float64(c)) //强制转化
fmt.Println(a, b, c)
fmt.Println(d)
const e = 23 //常量的定义
const f float64 = 34
fmt.Println(e, f)
}
2.3 ifelse语句
if(条件1){ 语句1 }else if(条件2){ 语句2 }else{ }
- if语句的条件不用加()
- 但是语句块必须要加{}
- else前面一定是 “}”
if true {
fmt.Println("true")
} else {
println("false")
}
2.4 for循环
go中只有for循环这一种循环
func main() {
i := 1
for i := 1; i < 9; i++ {
fmt.Println("loop")
}
for i <= 4 {
fmt.Println("loop2")
i++
}
}
2.5switch语法
a := 2
switch a {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
{
fmt.Println("before noon")
}
default:
fmt.Println("after noon")
}
2.6 数组
一般不用,因为长度固定
a := [5]int{1, 2, 3, 4, 5}
fmt.Println(a[4])
a := [3][2]int{{1, 2}, {3, 4}, {5, 6}}
fmt.Println(a[2][1])
2.7切片
不同于数组,切片可以任意更改数组长度
用make来创建切片
s := make([]string, 3)
s = append(s, "asdfsadfa")
s = append(s, "sadfasdf")
fmt.Println(s)
2.8 Map
m := make(map[string]int) //[key的类型] value的类型
m["one"] = 1
m["two"] = 2
2.9 Range
nums := []int{1, 2, 3, 4, 5}
sum := 0
for i, num := range nums { //i是索引, num是值
fmt.Println(i, num)
}
2.10 函数
func add(a int, b int)int{ //返回值为int
return a+b
}
2.11指针
func main() {
a:=2
add(&a) //转化为指针类型
fmt.Println(a)
}
func add(a *int) { //传入a的指针
*a+=2
}
2.12结构体
type user struct {
name string //属性名: 类型
password string
}
func main() {
a := user{
name: "xiaoming",
password: "1233456",
}
var b user
b.name = "asdasdf"
b.password = "121212"
fmt.Println(a.password)
}
2.13 结构体方法
func (u user )checkPassword(password string) bool {
return u.password == password
}
2.14字符串处理
2.15 JSON处理
-
序列化
user1 := user{Name: "xiaoming", Password: "123456"} buf, err := json.Marshal(user1) if err != nil { panic(nil) } fmt.Println(buf) -
反序列化
var user2 user json.Unmarshal(buf,&user2) //反序列化到user2结构体中
2.16字符串处理
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
input = strings.TrimSuffix(input, "\r\n")
转化为数字
input2, err := strconv.Atoi(input)