golang学习:day1|青训营笔记

102 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

go语言简介

1.1什么是GO语言?

  1. 高并发高性能
  2. 语法简单、学习路线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

1.2ByteDance为何选择GO?

  1. 性能问题
  2. c++不适合在线web业务
  3. 早期团队不是java背景
  4. 性能比较好
  5. 部署简单、学习成本低
  6. 内部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字符串处理

image-20220507210008622.png

2.15 JSON处理

  1. 序列化

     user1 := user{Name: "xiaoming", Password: "123456"}
     buf, err := json.Marshal(user1)
     if err != nil {
        panic(nil)
     }
     fmt.Println(buf)
    
  2. 反序列化

     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)