在C语言的基础上,微微的尝试入门go语言 - 基本语法。
Hello World
HelloWorld的代码如下:
1 |
|
代码段具体含义:
- package声明包
- import导入包
- ”//”为注释,不编译
- func main()_ 是程序开始执行的函数。
- main 函数是可执行程序必须包含的,一般是启动后第一个执行的函数(init() 更优先)。 与C语言相比,每一行不需要语句结束后加“;”了,但一行代码中多条语句键要加“;”,且“{”不能另起一行。
变量与类型
数据类型
数据基本类型:
- bool
- byte
- string
- int / uint
- float / complex
- 注:指针为
*type
, 例如*int
为int型的指针类型
数字类型: | uint8 | uint16 | uint32 | uint64 | | int8 | int16 | int32 | int64 |
浮点类型: | float32 | float64 | | complex64 | complex128 |
变量与常量
变量声明规则 :var identifier type
- var 表示变量
- indentifier 标识符/变量名
- 当标识符以大写字母开头,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(需要先导入这个包),这被称为导出(像面向对象语言中的 public);
- 标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
- type 变量类型
变量声明方法:
- 指定变量类型,如果没有初始化,则变量默认为零值
var v_name v_type
var x int = 0
- 根据值自行判定变量类型
var v_name = value
var x = false
- 使用 := 声明变量
v_name := value
x := false
- 注:如果变量已经用 var 声明过,再使用 := 声明变量会编译错误
常量声明规则 :const identifier type
- 常量数据类型只能是基本数据类型(不能指针)
- 其余与变量类似
基本运算符
其实运算符与C等语言基本一致。
算术运算
| +
| -
| *
| /
| %
| ++
| --
|
| 加 | 减 | 乘 | 除 | 取余 | 自增 | 自减 |
逻辑运算
| &&
| ||
| !
|
| 与 | 或 | 非 |
位运算
| &
| |
| ^
| <<
| >>
|
| 位与 | 位或 | 位异或 | 左移 | 右移 |
关系运算
| ==
| !=
| >
| <
| >=
| <=
| --
|
| 是否相等 | 是否不等 | 是否大于 | 是否小于 | 是否大于等于 | 是否小于等于 |
赋值运算
| +=
| -=
| *=
| /=
| %=
|
| 加后赋值 | 减后赋值 | 乘后赋值 | 除后赋值 | 取余后赋值 |
| &=
| ^=
| |=
| <<=
| >>=
|
| 位与后赋值 | 位或后赋值 | 位异或后赋值 | 左移后赋值 | 右移后赋值 |
例:C += A
等价于 C = C + A
地址与指针
| &
| *
|
| 取地址 | 指针变量 |
运算符优先级
同级运算符运算顺序从左到右,
()
括号内优先级提高,
下表中越靠上优先级越高:
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
分支与循环
分支
if:逻辑真则执行括号内代码。
1 |
|
- 与C语言相比,判断条件不用加括号了
switch:基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
1 |
|
- switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。
- switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用
fallthrough
。
select :随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。
1 |
|
循环
go语言中for
循环包括了while
的使用,因此只有for
循环。
while循环:
1 |
|
for循环:
1 |
|
- init: 一般为赋值表达式,给控制变量赋初值;
- condition: 关系表达式或逻辑表达式,循环控制条件;
- post: 一般为赋值表达式,给控制变量增量或减量。
- 先对表达式 1 赋初值;
- 判别赋值表达式 init 是否满足给定条件:
- 若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;
- 否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。
for range :可以对 slice、map、数组、字符串等进行迭代循环。
1
2
3for key, value := range oldMap { newMap[key] = value }
break
用于循环语句中跳出循环,并开始执行循环之后的语句。continue
不是跳出循环,而是跳过当前循环执行下一次循环语句。goto
语句可以无条件地转移到过程中指定的行。1
2goto label; label: statement;
至此已经可以完成最基本的程序了。