Golang语法基础|青训营笔记

39 阅读2分钟

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

这篇笔记记录了go语言的语法基础,包括主要包括变量、控制语句、数据结构、函数、指针、结构体与结构体方法、异常、内置包

  1. 从hello world开始
    package main
    
    import (
       "fmt"
    )
    
    func main() {
       fmt.Println("hello world")
    }
    

2.变量 Go语言有两种变量声明方式

 ①指定变量数据类型
     var b, c int = 1, 2
 ②根据值自行判断变量类型
     var a = "initial"
 ③:=
     g := a + "foo"

3.控制语句

if语句
 与C语言不同的是,可在条件判断时声明变量,如:
     
    if num :=9; num< 0  {

       fmt.Println(num, "is negative")

    }else if num < 10 {

       fmt.Println(num, "has 1 digit")

    } else{

       fmt.Println(num, "has multiple digits")

    }
②for语句
取消了while循环,全部用for实现循环
```
    i := 1
    for{
       fmt.Println("loop")
       break
    }
    for j := 7; j<9; j++ {
       fmt.Println(j)
    }
    for n :=0;n<5;n++ {
       if n%2 == 0 {
          continue
       }
       fmt.Println(n)
    }
    for i<= 3 {
       fmt.Println(i)
       i = i+ 1
    }
```
③switch
    没什么特别的,case中后自动跳出Switch
    ```
        a := 2
        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")
        }
    ```

4.数据结构

 ①数组
    ```
        var a[5]int
        a[4] = 100
        fmt.Println(a[4], len(a))
    ```
 ②切片
     与python的切片很类似
     用make语句定义
     ```
        s := make([]string, 3)
     ```
     ```
        fmt.Println(s[2:5])//输出从第2到第5个,不包括第五个
        fmt.Println(s[:5])//输出从第0个到第5个
        fmt.Println(s[2:])//输出从第2个到最后一个
     ```mapmake语句定义,索引顺序与加入顺序和key值无关,无序。
      ```
      m := make(map[string]int)//定义一个key为字符串,value为int的map
      m["one"] = 1//赋值
      r, ok := m["unknow"]//取值,r获取value值,ok获取元素是否存在
      ```range
        m := map[string]string{"a": "A", "b": "B"}
        for k, v := range m {
            fmt.Println(k, v)
        }

5.函数

  组成结构分别为函数名,参数,返回值
    
    `func exists(m map[string]string, k string) (v string, ok bool) {
        v, ok = m[k]
        return v, ok
    }`

6.指针

   与C语言的指针类似
   

7.结构体和结构体方法

   结构体与C语言类似,用点运算符访问。
   结构体方法与java中的类方法相似
    `type user struct {
        name string
        password string
    }

    func (u users)checkPassword(password string) bool {
        return u.password == password
    }`

8.异常

`func findUser(users []user, name string)(v *user, err error) {
    for _,u := range users{
            if u.name == name {
                    return &u, nil
            }
    }
    return nil, errors.New("not found")
}`

9.内置包

go中实现了大量的内置包,如strings、fmt、json、time、strconv、env等,具体使用方法可查阅https://studygolang.com/pkgdoc