计算机语言
语言是人与人沟通的表达方式。 计算机语言是人与计算机之间沟通交互的方式。
机器语言
一定位数的二进制的0和1组成的序列,也称为机器指令;
机器指令的集合就是机器语言;
与自然语言差异太大,难学、难懂、难写、难记、难查错。
汇编语言
用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相 加得到的数放到寄存器A中;
汇编语言写好的程序需要汇编程序转换成机器指令;
汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言。
低级语言
机器语言、汇编语言都是面向机器的语言,都是低级语言;
不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序。
高级语言
接近自然语言和数学语言的计算机语言 高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序;
1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译 人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理;
语言越高级,越接近人类的自然语言和数学语言;
语言越低级,越能让机器理解;
高级语言和低级语言之间需要一个转换的工具:编译器、解释器。
编译语言
把源代码转换成目标机器的CPU指令;
C、C++等语言的源代码需要针对当前CPU平台进行本地编译
解释语言
解释后转换成字节码,运行在虚拟机上,解释器执行中间代码;
Java、Python、C#的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机上运行 Go语言是强类型、静态编译型语言 数据声明必须指定明确类型;
不支持隐式类型转换,类型转换必须强制 代码编译成本地可执行代码,不需要虚拟机来运行 支持垃圾回收。
高级语言的发展
非结构化语言
编号或标签、GOTO,子程序可以有多个入口和出口;
有分支、循环。
结构化语言
任何基本结构只允许是唯一入口和唯一出口;
顺序、分支、循环,废弃GOTO。
面向对象语言
更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承 封装、继承、多态;
函数式语言 古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中 函数是“一等公民”,高阶函数。
Go语言基础
注释
// 单行注释
/* xxxx */ 多行注释,编译器忽略该区间,其间都被认为是注释内容。虽然Go支持,但很少使用。
函数、结构体等习惯把注释写在上面;包注释会写在package之上。
打印一个hello world
// TODO: 将来完成,推荐 // NOTE: 请注意 // Deprecated: 告知已经过期,建议不要使用。未来某个版本可能移除
命名规范
标识符采用CamelCase驼峰命名法,如果只在包内可用,就采用小驼峰命名;如果要在包外可见,就采用大驼峰命名;
简单循环变量可以使用i、j、k、v等;
条件变量、循环变量可以是单个字母或单个单词,Go倾向于使用单个字母。Go建议使用更短小;
常量驼峰命名即可,在其他语言中,常量多使用全大写加下划线的命名方式,Go语言没有这个要求 对约定俗成的全大写,例如PI;
函数/方法的参数、返回值应是单个单词或单个字母
函数可以是多个单词命名;
类型可以是多个单词命名;
方法由于调用时会绑定类型,所以可以考虑使用单个单词;
包以小写单个单词命名,包名应该和导入路径的最后一段路径保持一致;
接口优先采用单个单词命名,一般加er后缀。Go语言推荐尽量定义小接口,接口也可以组合。
关键字
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
预定义标识符
Types: any bool byte comparable complex64 complex128 error float32 float64 int int8 int16 int32 int64 rune string uint uint8 uint16 uint32 uint64 uintptr Constants: true false iota Zero value: nil Functions: append cap close complex copy delete imag len make new panic print println real recover
标识符
一个名字,本质上是个字符串,用来指代一个值;
只能是大小写字母、数字、下划线,也可以是Unicode字符;
不能以数字开头;
不能是Go语言的关键字;
尽量不要使用“预定义标识符”,否则后果难料;
大小写敏感;
标识符建议: 不要使用中文,非必要不要使用拼音,尽量遵守上面的命名规范,或形成一套行之有效的命名规则。
字面常量
它是值,不是标识符,但本身就是常量,不能被修改。 Go语言中,boolean、rune、integer、float、complex、string都是字面常量。其中,rune、 integer、float、complex常量被称为数值常量。
常量
常量:使用const定义一个标识符,它所对应的值,不允许被修改。 对常量并不要求全大写加下划线的命名规则。
注意:Go语言的常量定义,必须是能在编译器就要完全确定其值,所以,值只能使用字面常量。这和其 他语言不同!例如,在其他语言中,可以用常量标识符定义一个数组,因为常量标识符保证数组地址不 变,而其内元素可以变化。但是Go根本不允许这样做。
批量写iota从0开始,即使第一行没有写iota,iota也从第一行开始从0开始增加