golang 初探
golang 语言由 google 开发的高级语言,对并发的支持可以很容易的实现高并发程序,可以方便的用于多核处理器和网络开发。golang 可以快速编译,同时支持垃圾回收功能,并且还支持运行时反射。
golang 具有高效,静态类型,但是又具有解释语言的动态类型特征的系统级语法。
ps. 之前那家区块链公司给我发 offer 后我还真的学过一段时间的 golang, 可谁知那家公司后来垮了/(ㄒoㄒ)/~~
golang 源代码组成
示例
1 | package main |
一个 golang 源文件由至少三个部分组成
- package 声明部分
- import 导入部分
- func 函数定义部分
另外可能还有全局变量声明。
所有初始化完成后,程序从 main 包的 main 函数开始执行。
基本语法
变量声明
使用 var 关键字声明一系列的变量,类型附在声明最后,如果跟有初始化列表,那么类型可以省略。
1 | var i, j, k int |
在函数内部可以使用 := 赋值语句代替 var 关键字,但是在函数体外,语句必须由关键字 var, func 开头,所以 := 不可以用。
函数声明
使用 func 声明函数,参数列表后可带返回值类型
1 | func add(x int, y int) int { |
以上几种方法只在参数列表和返回值列表不同,属于 golang 的语法糖。
for 语句
for 语句三种写法
1 | for i < 0; i < 1000; i++ { |
golang 中无 while, do 关键字。
switch case
1 | switch i { |
于 C++, Java 不同在于,golang 的 switch 是只会执行选中的 case, 而不是跟在后面所有的 case, 另外,golang 的 case 中的可以不是字面量或者常量值,也可以是表达式,条件表达式或者函数调用。
以上代码当 i == 0 时,f() 不被调用。
f 当 i == 0 时不被调用。
defer 关键字
def 声明一个函数在当前的函数体返回时调用,无论是执行了 return 语句,还是执行到了函数体尾部,还是抛出了异常。
1 | DeferStmt = "defer" Expression . |
Expression 必须为函数或是函数调用。
defer 函数调用声明会被推入一个栈中,所以当声明多个 defer 语句时,执行顺序为其声明顺序的逆序。
语法与规范
与其他语言不同的是在于 golang 将一些编程规范包含到了语法中。
在 golang 中,任何一个代码块由 {} 环绕,并且第一个 { 强制不换行。
在一个包的符号中,当一个符号的首字母大写时,这个符号为导出符号。
类型
1 | bool |
没有初始化但是类型已经确定的变量会被赋于 0 值。
对于数值类型为 0
对于 boolean 类型为 false
对于字符串类型为 “”
类型推导
当变量不带类型声明时,可从赋值语句的右值推导出类型。
常量
常量声明要在前面加 const 关键字