Go是一种静态强类型、编译型、并发型语言。
一、Go语言的设计思维
尽可能少的方式去处理事情,减少选择的烦恼。
go的特点:
- 仅有25个关键字,简洁的语法
- 内置垃圾回收器,大大降低程序员管理内存的负担
- 去除隐式类型转换、去除指针算法,提高语言健壮性
- 首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
- 故意不支持函数默认参数,必须明确每个参数意义,提高设计的清晰度和代码可读性
- 没有面向对象的类,也没有子类,没有构造函数和析构函数
- 偏好组合
- 任何类型都可以拥有方法
- 接口只是方法的集合,其实现是隐式的(无需implements显示声明)
- n--、n++都是语句,不是表达式。没有--n、++n
- 没有三元运算符
- 内存总是初始化为零值
- 没有异常
- 内置字符串、切片、map等类型
- 内置并发支持,对多核计算机支持友好。goroutine、channel、select就是为并发而生的
- 官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面
二、Vscode开发工具
依赖git:Git官网下载并安装
下载go:The Go Programming Language (google.cn)
vscode:Visual Studio Code - Code Editing. Redefined下载并安装
插件搜索并安装:
还包括TODO Tree
创建项目并重启vscode
执行项目会提示dlv依赖的安装,install ALL即可(由于是国外的所以需要在系统环境变量中配置GOPROXY,mirrors.aliyun.com找到相关代理地址,后面添加,direct)
不安装dlv,运行go mod init XXXX(随意的项目名称)即会报错(相当于执行F5)go mod管理整个项目
运行项目执行:go run xxx.go
三、语言的发展
1、cpu:控制器、计算器
数据在I里,从I读取到内存以供cpu使用,cup负责从内存加载指令和数据,并把执行结果写入内存,如有必要写到O设备上。
机器语言(二进制)不同设备指令集并不一致->汇编语言(CPU指令集一致:SUB A B)->编译语言(符合ABI规范的二进制文件,os帮加载到内存运行main)
静态语言:运行时结构不可变的语言。
2、高级语言的发展:
- 非结构化语言
编号或标签、GOTO,子程序可以有多个入口和出口
有分支、循环
- 结构化语言
任何基本结构只允许是唯一入口和唯一出口
顺序、分支、循环、废弃GOTO(随意跳转)
- 面向对象语言
更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承
封装、继承、多态
- 函数式语言
古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
函数是“一等公民”,高阶函数
四、程序(program)
- 算法+数据结构=程序
- 数据是一切程序的核心
- 数据结构是数据在计算机中的类型和组织方式
- 算法是处理数据的方式,算法有优劣之分
1、命名规范
标识符采用CamelCase驼峰命名法
- 只在包内可见,采用小驼峰命名
- 在包外可见,采用大驼峰命名
简单循环变量可以使用i、j、k、v等
条件变量、循环变量可以是单个字母或单个单词,Go倾向于使用单个字母。
常量驼峰命名即可
- 在其他语言中,常量多使用全大写加下划线的命名方式,Go语言没有这个要求
- 约定俗成的全大写,例如PI
函数/方法的参数,返回值应是单个单词或单个字母
函数可以是多个单词命名
类型可以是多个单词命名
方法由于调用时会绑定类型,所以可以考虑使用单个单词
包以小写单个单词命名,包名应该和导入路径的最后一段路径保持一致
接口优先采用单个单词命名,一般加er后缀。Go语言推荐尽量定义小接口,接口也可以组合
2、标识符
在编译后看不到,被替换成了内存地址了。
标识符是编程给程序员用的,用来指代内存中的一个值
3、常量
Go语言中,boolean、rune、integer、float、complex、string都是字面常量。其中rune
integer、float、complex常量被称为数值常量