[ 后端与 go | 青训营笔记]

48 阅读3分钟

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

go语言特点

go保证了既能达到静态编译语言的安全性和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容go语言:go=c+python。

1)从c继承很多概念,表达式语言,控制结构,基础数据类型,调用参数传值,指针等,也保留了和c语言一样的编译执行方式和弱化的指针。

2)引入包的概念,用于组织程序结构,go语言的一个文件的要属于一个包,不能单独存在

3)垃圾回收机制,内存字典回收,不需要开发人员管理

4)天然并发

  • 从语言层面支持并发,实现简单
  • goroutine,轻量级线程,可实现大并发处理,高效利用多核
  • 基于CPS并发模型实现
  • 吸收了管道通信机制,形成go特有的管道channel通过管道channel,可以实现不同goroute之间的相互通道
  • 函数返回多个值
  • 新的创新:切片,延时执行defer等

go语言后面不用带分号,定义变量,变量名在前类型在后

执行流程分析

两种方式的区别:

  • 如果先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go的开发环境的机器上,任然可以运行。
  • 如果是go run 源代码,那么如果要在另一台机器上运行,也需要go开发环境。
  • 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多。
go build -o my.exe hello.go
my.exe:自定义文件名
hello.go:源代码

go程序开发的注意事项

必须以go为扩展名

go程序的执行入口是main()函数

go语言严格区分大小写

go方法由一条条语句构成,每个语句后不需要分号(go会自动添加分号)

go编译器是一行行进行编译的,因此我们一行就写一条

go语言定义的变量或者import包如果没有使用到,是不能通过编译的

大括号成对出现,缺一不可

常用命令

  • build: 编译包和依赖
  • clean: 移除对象文件
  • doc: 显示包或者符号的文档
  • env: 打印go的环境信息
  • bug: 启动错误报告
  • fix: 运行go tool fix
  • fmt: 运行gofmt进行格式化

转义字符

\t:一个制表位,实现对齐
\n:换行
\:一个\
":一个"
\r:一个回车,从当前行最前面开始输出,覆盖掉以前的内容

注释

/**/,块注释,少用
//,行注释

代码风格

gofmt -w main.go //格式化源代码

一行最多80个

fmt.Println("hhhhhh"
            ,"kkkkk")

Golang标准库API文档

studygolang.com/pkgdoc

Dos

Dos:磁盘操作系统,就是windows目录结构。

变量

声明变量的一般形式是使用 var 关键字:

var 变量名 变量类型 //标准格式
var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)//批量格式
名字 := 表达式 //简短格式
x:=100
a,s:=1, "abc"
//简短模式限制
定义变量,同时显式初始化。
不能提供数据类型。
只能用在函数内部

Go语言的基本类型有:

  • bool
  • string
  • int、int8、int16、int32、int64
  • uint、uint8、uint16、uint32、uint64、uintptr
  • byte // uint8 的别名
  • rune // int32 的别名 代表一个 Unicode 码
  • float32、float64
  • complex64、complex128

当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的。

每个变量会初始化其类型的默认值:

  • 整型和浮点型变量的默认值为 0 和 0.0。
  • 字符串变量的默认值为空字符串。
  • 布尔型变量默认为 bool。
  • 切片、函数、指针变量的默认为 nil。

如果 hp 已经被声明过,但依然使用:=时编译器会报错