Go语言基础语法(一) | 青训营笔记

167 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

从零接触一门新的语言如何认识它的语法?除了学习官方的手册外,我认为读代码是很重要的一步。由此我开启了我的青训营之旅,本文是我对Go语言基础语法的认识。

学习过程

青训营的课程资料里为我们提供了一些简单易懂的代码示例,如下所示:

package mainimport (    "fmt")func main() {    fmt.Println("hello world")}

这是一个很经典的输出hello world的代码。相信大家在没有接触过Go语言之前,也能轻易看懂这段代码。前面是包名以及对包的引入,最后一段是主函数,主函数中只有一个输出语句用于输出hello world。看起来和其他语言也大差不差嘛。

接下来,通过阅读更多的代码示例我们就会发现其不同之处,并对变量、常量、条件语句、循环语句、数组、函数等语言的基本语法会有一定的了解。例如我们看下面这个示例:

package mainimport (    "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) // initial 1 2 true 0 0    fmt.Println(g)                // initialapple    const s string = "constant"    const h = 500000000    const i = 3e20 / h    fmt.Println(s, h, i, math.Sin(h), math.Sin(i))}

通过读代码我们可以发现,Go语言在声明变量的时候变量类型是在变量名后面的,甚至是直接忽略了变量类型没有写出,这是什么原因?结合青训营的课程,我们可以知道Go语言是强类型语言,字符串是其内置类型,且在声明变量后Go语言可自动推导出变量类型。

以上就是通过读代码进行学习的大致过程,通过这样的方法接触一门新的语言,既不会感到枯燥,又可以了解到一些Go语言实际应用中的内容。

语法总结        

变量

变量有两种声明方式:

①_var 变量名 (变量类型)=变量值_ 

e.g. var a = "initial"

      var b, c int = 1, 2

②_变量名 :=变量值_

e.g.f := float32(e)

括号中的变量类型可忽略,可自动推导出

Go语言中常用的声明方法是上述的两种

常量

与变量相同,常量类型可忽略,可自动推导出

条件语句 if...else

需要注意Go语言中if后面的判断条件不需要括号,但条件下需执行的语句必须由大括号括起来

e.g.

    if 7%2 == 0 {        fmt.Println("7 is even")    } else {        fmt.Println("7 is odd")    }

循环语句 for

Go语言中没有do...while和while,for循环的条件也不需要用括号括起来

e.g.

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

switch

switch后的变量名不需要括号,每一个分支中也不需要加break,实现一个分支后不会再进入其他分支,同时switch可以使用任意的变量类型。因此,switch可以替换掉多个if else使得代码逻辑更清晰。

e.g.

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")    }

数组

数组是具有编号且长度固定的元素序列,要和之后提到的切片区分开来

数组操作大都类似于C或C++语言,可以在今后的使用和阅读代码中继续探索其使用方法

切片

切片不同于数组可以任意更改长度

取值的方法类似于数组,同时拥有append、copy、切片等操作(即取出其中的一段元素)

map

类似于字典,Go中的map是完全无序的,遍历的时候顺序随机

range

range可以对数组、切片或map进行快速遍历。遍历数组和切片也会返回两个值,分别是索引和值

函数

和声明变量一样,函数的类型也是后置的。Go语言中的函数原生支持返回多个值,在实际应用中就经常使用第一个是真正的返回结果,第二个是错误信息,方便反馈错误

指针

和C++一样可用于对传入参数进行修改,调用的时候也是加一个“&”符号用于类型匹配

结构体及结构体方法

其声明方法与C++类似,需要注意的还是类型后置,无论是函数类型还是变量类型,都需要后置