Go语言入门
最近开始搭建个人网站,在后端技术栈的选择上犹豫了很久。综合了网络上的各种评价最终选择了golang。作为一个新近开源的语言,go语言较为简单,符合我的需求同时具有完善的框架。
概述
Go语言被设计成一门应用于搭载在Web服务器,存储集群,或其他类似用途的服务器系统编程语言。Go相对于其他大多数语言有着更高的开发效率。
Go语言于2009年开源,未来前景相当不错。
基础
Go语言的基础内容和语法
包(package)
每个Go程序都是由包构成。按照约定,包名与导入路径的最后一个元素一致,例:math/rand 中的源码均以package rand 语句开始。
示例1:package.go
1 | package main |
运行结果1:
首先要把源码编译成二进制文件,直接在shell里面输入命令
1 | $ go build package.go |
运行编译完成的二进制文件
1 | $ .\packages.exe |
可以看到shell输出了结果
1 | 我最爱的数字是 1 |
包的导入和导出(import & export)
示例1展示了包的“分组”导入形式,即
1 | import ( |
Go也同时支持多个导入语句
1 | import "fmt" |
包的导出名均以大写字母开头,例如:math.Pi,在包外只能使用已导出的名字,任何“未导出”的名字在该包外均无法访问,例如math.pi编译后运行便会报错
示例2:exported.go
1 | package main |
编译运行
1 | $ go build .\exported.go |
输出
1 | .\exported-names.go:9:14:cannot refer to unexported name math.pi |
改为math.Pi后报错消失
函数(funtion)
函数的定义格式如下:
1 | func function_name( [parameter list] ) [return types] { |
func:函数开始声明function_name:函数的名称,函数名和参数列表一起构成函数签名parameter list:参数列表,每个参数需要声明其名称和类型,类型在变量名之后。函数可以没有参数或者接受多个参数,多个参数用逗号进行分隔,多个形参类型相同时可以采用省略写法,例如:
1 | x int , y int |
与
1 | x , y int |
的效果是相同的
return_types:返回类型,函数返回值的数据类型,与参数相同,函数也可以返回任意数量的返回值,不需要返回值的情况下return_typs不是必须的function body:函数体,没啥好说的,函数定义的代码段
示例3:function.go
1 | package main |
编译运行
1 | $ go build .\function.go |
输出55
函数的返回值可以被命名,其名称应具有一定的意义,并可以作为文档使用,例如
1 | func split(sum int) (x,y int) { |
没有参数的return语句会返回已命名的返回值,即直接返回,直接返回在长的函数中会影响其可读性
变量(variables)
变量的定义格式如下
1 | var [ variable_name ] [ variable_type ] = [ variable_value ] |
var:变量的声明开始;variable_name:变量的名称;variable_type:变量的数据类型;variable_value:变量声明的初始值,如果初始化值已存在,则可以省略类型;
变量还可以用简洁赋值语句:=声明并赋值,例如
1 | x := 3 |
这种方式只能在函数内使用,函数外的每个语句都必须以关键字开始
没有明确初始值的变量声明会被赋值零值,不同类型的零值分别为:
- 数值类型为
0; - 布尔类型为
false; - 字符串为
""(空串);
Go的基本数据类型如下
1 | bool // 布尔值 |
通过表达式T(v)可以将变量进行类型转换,例如
1 | var i int = 42 |
或者还可以写成更加简洁的形式
1 | i := 42 |
注意Go在不同类型之间赋值需要显式转换
常量
常量与变量的声明方法类似,只不过使用const关键字,常量可以是字符、字符串、布尔值或数值
1 | const pi = 3.14 // 声明一个数值常量 |
注意:
- 常量不能使用
:=语法声明 - 未指定类型的常量由其上下文决定
总结
本篇文章大致梳理了Go语言的一些基本语法,总体来讲Go的语法还是比较简洁易懂,基本上还是很好理解的。

