基础语法和常用特性解析 | 青训营

95 阅读4分钟

基础语法

  • 环境介绍

    • IDE : GoLand
    • GoLang version : 1.20.6
  • helloword:

    • 这部分主要就是简单的使用了golang在控制台输出了一下helloword,算是每个初学者的仪式感吧
  • 变量与常量:

    ​ 这里主要介绍了几种基本的变量与常量的声明方法

    1. var a = "initial"

      var 变量名 = 变量值

      虽然golang是强类型语言,但这种方法不需要强调变量类型,会自动推导

    ​ 2.var b, c int = 1, 2

    ​ var 变量名 数据类型 = 变量值

    ​ 也可以用带变量类型的方法声明,不过需要把类型放在变量名后,这是个不同点,同时这个例子也展示了多个同类型变量的声明

    ​ 3.f := "xx"

    ​ 变量名 := 变量值

    ​ 这是我目前用到的最多的方法(应该)

    • const s string = "constant"

      const 常量名 = 常量的值

      同样常量也可以选择是否显式写出类型

  • 变量类型

    • 关于其他类型暂时没有发现什么特别不同的地方,这里着重讲一下浮点数
    • float64这是Go语言中的双精度浮点数,float32是单精度浮点数
  • if-else

    • Go语言中if-else的判断条件可以不能写在()中,但是 "{"必须和if在同一行,否则编译不通过

      if 8%4 == 0 {
      	fmt.Println("8 is divisible by 4")
      }
      

      其他语言中"{"可以跨行,例如c语言

      if (8%4 == 0)
      {
      	printf("ok")
      }
      
  • for

    • Go语言只有这一种循环,可以后面不跟内容表示死循环

      for {
      	fmt.Println("loop")
      	break
      }
      
    • 也可以用下面的方法,for后面三段任何一段都可以不写,在for后面声明变量似乎只能用第三种方法,其余两种都不可以,循环中可以用break跳出,或者continue继续

      for j := 7; j < 9; j++ {
      	fmt.Println(j)
      }
      
  • switch

    • Go语言中switch语句的case中不需要加break也不会跑完所有分支

      a := 2
      switch a {
      case 1:
      	fmt.Println("one")
      case 2:
      	fmt.Println("two")
      
    • switch后可以跟任意类型的变量,也可以不写变量,在case里面写条件分支,来实现多个if-else的逻辑

      switch {
      case t.Hour() < 12:
      	fmt.Println("It's before noon")
      default:
      	fmt.Println("It's afternoon")
      }
      
  • 数组

    • 数组同样有两种声明方法,我认为两种的区别在于是否在声明的同时初始化

      var a [5]int
      b := [5]int{1, 2, 3, 4, 5}
      
    • 下面是二维数组的声明及初始化

      var twoD [2][3]int
      for i := 0; i < 2; i++ {
      	for j := 0; j < 3; j++ {
      		twoD[i][j] = i + j
      	}
      }
      
  • 切片和map

    • 初始化

      s := make([]string, 3) //切片
      m := make(map[string]int) //map
      
    • 切片可以当作一个灵活的数组可以通过各种方法非常灵活的取用其中的内容,也可以很灵活的增加删除元素,map中的元素是按照键值对的方式存储的,可以用类似字典的方式处理,同样十分灵活

    • 切片和map都可以用range快速遍历,对于切片,range会返回索引和值,map会返回键和值,可以用两个参数接收,也可以用"_"忽略其中一个返回值

      • 下划线似乎在Go中比较特殊,例如包名或者文件名不可以用下划线开头,否则会提示

下划线.png

  • 函数声明

    • func (参数列表) (返回值列表),Go中的函数大多都有两个返回值,一个是结果,一个是异常
  • 指针

    • Go语言中指针仅用于修改变量的值,对于需要修改的变量在参数列表中带上"*",同时在对变量进行操作时也带上"*"
  • 结构体

    • 结构体的声明与c语言类似,不过需要注意把类型写在后面,如同声明变量一样

    小项目相关(其他内容大多是方法,不涉及特别多内容不过多阐述了)

    1. 猜数字

      • 首先关于课程中提到的rand.Intn(maxNum)会产生重复数字,应该是由于版本原因,我这边没有该现象

      • 还是因为版本不同,rand.Seed()方法已经不推荐使用

seed.png

    *   v3中在将输入转换成数字的过程中出现了错误

      

err.png

        将错误打印出来

       

err2.png

        似乎是多了个/r虽然不知道为什么会多,希望大家可以帮忙解答,但是可以用去掉换行符同样的操作去掉回车

        `input = strings.TrimSuffix(input, "\r")`

        问题解决

    其他也没什么问题似乎

2.  字典

    *   这部分内容主要是将之前课程讲到的json部分应用了一下

3.  代理

    *   这里遇到了奇怪的问题,我在v1版本运行,命令行界面就不动了,也不能输入

       

故障.png

        有没有人知道啥原因呀