GO语言基础语法篇 | 青训营笔记

79 阅读3分钟

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

课堂笔记

一、本堂课重点内容:

  • go语言基础语法
  • go语言的实战案例

二、具体案例:

1. go语言基础语法

  • 入门代码,打印hello world

image.png

  • Go 语言变量 ——Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字

    使用var进行变量声明

    var e float64

    一次声明多个变量

    var a, b int = 3, 4

  • if-else

    if后面没有括号,else必须放在if尾部大括号后面,与c语言很像的写法

  • switch

    switch后面判断选择条件无括号

image.png

switch后面也可以不用判断条件,条件写在case后面进行判断

image.png

  • for循环

    相比较于C语言没有while,for不加判断条件,直接构成死循环

  • 数组

    声明语法

var 数组变量名 [元素数量] Type

    var a [5]int
    b := [5]int{1, 2, 3, 4, 5}
    var twoD [2][3]int
  • 切片

    用make([]类型,长度)函数创建,和数组一样,用append来追加元素,没有长度限制的数组

  • map

    键值对集合,类似python中的字典,声明make(map[键类型]值类型)

image.png

  • range

    用于快速遍历slice或map,返回下标/键和值

image.png

  • 函数

    参数放在变量之后

image.png

image.png

  • 指针

    主要用于修改结构体之类的

image.png

  • 结构体

    和C语言很像,包含特定类型的变量集合

  • 结构体方法

    func (u user) checkPassword (password string) bool{  //(不带指针写法)类成员函数
       return u.password == password
    }
    ​
    func (u *user) resetPassword (password string) {  //(带指针写法,可修改结构体)类成员函数
       u.password = password
    }
    
  • 错误处理

    每次都会用err获取对应的错误值

    u, err := findUser([]User{{"wang","1024"}}, "wang")
    if err != nil{
       fmt.Println(err)  //有错误时
       return
    }
  • 字符串操作

    调包对应函数处理就行

image.png

  • 字符串格式化

    v打印任意字符,+v更详细,#v更更详细

  • JSON处理

    结构体的每个字段首字母大写,就可以用JSON.Marshal进行序列化,使用

  • 时间处理

    和python语言很想,基本上有对应包,调用对应函数获取时间戳

image.png

  • 数字解析

    和C语言很像

image.png

  • 进程解析

    不知道后面用不用的到,这一块

package main
import (
   "fmt"
   "os"
   "os/exec"
)
​
func main() {
   fmt.Println(os.Args)  //提供原始命令行参数访问功能,注意,切片中的第一个参数是该程序的路径,并且 os.Args[1:]保存所有程序的的参数。
​
   fmt.Println(os.Getenv("PATH"))  //获取环境变量
​
   fmt.Println(os.Setenv("AA","BB"))  //设置环境变量
​
   buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
   //启动子进程,运行CombinedOutput命令并返回其组合的标准输出和标准错误。
   if err !=nil {
      panic(err)
   }
   fmt.Println(string(buf))
}

2. go语言的实战案例

  • 猜数字游戏

    这个游戏思想相对比较简单,注意设置随机种子,一般随机种子都是借助当前的时间戳实现随机数

  • 在线词典

    了解到Convert curl commands to code这个网站可以复制curl自动生成爬虫代码

  • Socks5代理

    socks代码很多,不多总体思路以及代码也是学习的很理解,讲的很清楚,虽然碰到不少错误,但都解决了

三、课后个人总结

在今天的学习,第一次正式学习go语言,之前也是零零散散想学习go语言,但总是没有一个督促和激励,学到一点点语法就忘记了,其实在任何一门语言学习的过程中,避免不了忘记,所以我们更需要反复实战,反复见识,才可能越学越精,计算机语言基础语法之间都是相似相通的,可能30分钟学不了精通,但在后续的学习中的不断巩固与练习,总会将基础知识反复的