Go基础 - 条件,循环,函数,指针
Go语言学习笔记:
第一章:概述
Go语言的特点:
- 与C99,C11相似之处颇多,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。
- 是对类C语言的重大改进,它不但能访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。
- 旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等优势
- 因为Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。
- Go是编译型语言,Go自带了编译器,因此无需单独安装编译器。
- 将一切都并发化,运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数。
- 静态链接,只需要一个可执行文件,不需要依赖库
多个 goroutine 中,Go语言使用通道(channel)进行通信,通道是一种内置的数据结构,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。这让编程模型更倾向于在 goroutine 之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权。
Go语言一个并发的例子:
1 | package main |
最终就是并行输出cat
和dog
及其对应的channel
数据
从Hello,World开始
1 | package main //表示文件中所有代码都属于main包 |
Go语言的一些特点:
- Go是静态类型的,在程序运行之前就知道值的类型是什么。
- Go文件的三个部分:package子句,任何import语句,实际代码;
- Go语言不推荐使用分号隔开语句,Go语言格式很标准,缩进和间距都有固定要求
- Go语言必须只导入它引用的包,如果导入的有没用到的会自动优化;区分大小写,必须有main函数。
- println()函数可以有任意多的参数,参数之间用
,
分开;如果import包含多个包需要();
字符串:字符串字面量用 “”包围,字符字面量用 ‘’包围;可以使用小数点来区分小数和整数。
声明变量:var关键词 + 变量名 + 类型,如var quantity int;如果声明时没有赋值,默认为零值;
声明常量:const关键词 + 常量名 + 类型,常量的值必须保持不变;
声明变量并声明的两种方式:
1 | var quantity int = 4; |
1 | go build //将源代码文件编译为二进制文件 |
块和变量的作用域:和C++类似,比如一个if内定义的变量在if外就不能使用。
Head First Go:Chapter2的pass_fail案例
1 | // pass_fail reports whether a grade is passing or failing. |
另外一个例子:另外一个例子,猜数字
1 | // guess challenges players to guess a random number. |
第三个例子:计算面积
1 | package main |
函数形参接收实参的副本:
Go语言是一种“值传递”语言,函数形参从函数调用中接收实参的副本,函数中改变的是副本的值,而不是原始的值。
1 | func main(){ |
为了解决函数保存的值是副本的值这个问题,引入了指针的概念;
Go语言使用&
来获取变量的内存地址。
1 | ptr := &v //假设v的类型为T |
用指针可以对上面的例子进行修改:
1 | func main(){ |
第四讲 代码集
工作区目录包括三个子目录:bin,pkg,src;其中bin保存可执行文件,pkg保存已编译的包代码,src保存源代码,注意src中的每个文件夹最多只能包括一个main函数。
Go语言默认的安装包在C盘Program Files/Go/src文件夹中,定义了一些常用库及其函数。
这个安装包的路径可以通过cmd中go env命令查看,Goroot即为安装包的路径。
如果自己新建一个包,需要将这个包放在文件夹中然后放在Goroot的src目录下或者Gopath的src目录下。
- 将函数名的第一个字母大写,函数就是可导出的,也就是其他的包也能用这个包里的函数。如果函数名的第一个字母小写,它只能在自己的包里使用,其他的包不能使用这个函数。
- Go语言命名规范:包名应该全部小写,并且尽量保持简洁。
- 如果导入的数据包有重名的情况,应该注意import的时候将路径写全。
1 | go build test.go #go build 命令编译文件,生成一个可执行二进制.exe文件 |