从零开始的Go语言学习生活 | 青训营笔记

55 阅读3分钟

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

什么是Go语言

Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,他们最终的目标是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”,当然从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想。但是Go语言更是对C语言最彻底的一次扬弃,它舍弃了C语言中灵活但是危险的指针运算,还重新设计了C语言中部分不太合理运算符的优先级,并在很多细微的地方都做了必要的打磨和改变。

关于Go语言的环境的配置与安装

详细的安装步骤我自己总结并发表出博客: Mac 下配置 go语言环境

Go语言基础语法

同一个目录下的所有.go文件必须声明同一个包名 main包 在Go语言里,命名为main的包具有特殊的含义。Go语言的编译程序会试图把这种名字的包编译为二进制可执行文件。main()函数是程序的入口,程序编译时,会使用声明main包的代码所在的目录的目录名作为二进制可执行文件的文件名。

命名导入

导入的多个包具有相同的名字,可以使用命名导入:在import语句给出的包路径的左侧定义一个名字,将导入的包命名为新名字。

package main

import (
   "fmt"
   myfmt "mylib/fmt"
)

函数init

每个包可以包含任意多个init函数,会在main函数之前执行。

func init() {
    // 执行操作
}

使用Go的工具

使用命令执行编译和清理工作

go build
go clean

go vet

检测代码的常见错误

对gb的介绍

依赖管理 gb工程会区分开发人员写的代码和开发人员需要依赖的代码。

gb工程与Go官方工具链(包括go get)并不兼容。因为gb不需要设置GOPATH,而Go工具链无法理解gb工程的目录结构。

数组、切片和映射

数组

由于数组占用的内存是连续分配的,CPU能把正在使用的数据缓存更久的时间。 声明和初始化 在Go语言中声明变量时,总和使用对应类型的零值来对变量进行初始化。 g

// 声明一个包含5个元素的整型数组
var array [5]int

// 声明一个包含5个元素的整型数组
// 用具体值初始化每个元素
array := [5]int{10, 20, 30, 40, 50}

并发

并发与并行的概念

并发(concurrency)不是并行(parallelism)。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。

goroutine

一个线程可以创建多个goroutine

并发模式

runner

pool

work

Go语言的类型系统

定义类型的方法-使用struct关键字

type user struct{
    name        string
    email       string
    ext         int
    privileged  bool
}

// 声明user类型的变量,并初始化所有字段
lisa := admin{
    name:       "Lisa", 
    email:      "lisa@email.com",
    ext:        123,
    privileged: true,
}

// 也可以这样
// 声明user类型的变量
lisa := user{"Lisa", "lisa@email.com", 123, true}

引用参考:

课外补充引用:

文章学习来源:

感谢以上作者的文章,今天的学习收获满满!!Thanks and HappyCoding!