Go语言简介
Golang
什么是Go?
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
三个方向
- 区块链研发工程师
- Go服务器端/游戏软件工程师
- Golang分布式/云计算软件工程师
Golang的概述
Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容Go语言:Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。
从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针
引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
垃圾回收机制,内存自动回收,不需开发人员管理
天然并发(重要特点)
- 从语言层面支持并发,实现简单
- goroutine,轻量级线程,可实现大并发处理,高效利用多核。
- 基于CPS并发模型(CommunicatingSequentialProcesses)实现
吸收了管道通信机制,形成Go语言特有的管道channel通过管道channel,可以实现不同的goroute之间的相互通信
函数可以返回多个值.
新的创新:比如切片slice、延时执行defer
Golang 的开发工具的介绍
注意:需要安装go的sdk开发工具
Go 语言最主要的特性
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
第一个 Go 程序
"开发一个Hello.go的程序,可以输出Hello World"
package main "一个Go文件需要在一个包"
"导入包"
import "fmt"
"主函数,程序的入口"
func main() {
fmt.Println("Hello, World!")
}
Golang 执行流程
如果是对源码编译后,再执行,Go的执行流程如下图
如果我们是对源码直接执行gorun源码,Go的执行流程如下图
两者区别
- 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
- 如果我们是直接gorungo源代码,那么如果要在另外一个机器上这么运行,也需要go开发环境,否则无法执行。
- 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。
Go 程序开发的注意事项
-
Go源文件以"go"为扩展名。
-
Go应用程序的执行入口是main()函数。这个是和其它编程语言(比如java/c)
-
Go语言严格区分大小写。
-
Go方法由一条条语句构成,每个语句后不需要分号 (Go语言会在每行后自动加分号)
-
Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
-
Go语言定义的变量或者import的包如果没有使用到,代码不能编译通过。
- 大括号都是成对出现的,缺一不可。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
"定义一个变量 如果你没有使用这个变量 就不会编译通过"
var num = 10
}
Go 语言转义字符
常用的转义字符有如下
-
\t
:表示一个制表符,通常使用它可以排版。 -
\n
: 换行符 -
\"
: 一个“ -
\r
: 一个回车,重头还是,不换行
package main
import "fmt" //fmt包中提供格式化 输出输入函数
func main(){
//演示转义字符的使用
fmt.Println("姓名\t年龄\t籍贯\t住址\njohn\t12\t河北\t北京")
}
关键字
下面列举了 Go 代码中会使用到的 25 个关键字或保留字:
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 |
除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符:
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
注释
// 单行注释
/*
Author by me
我是多行注释
*/
Go 语言的空格
Go 语言中变量的声明必须使用空格隔开,如:
var age int;
语句中适当使用空格能让程序更易阅读。
无空格:
fruit=apples+oranges;
在变量与运算符间加入空格,程序看起来更加美观,如:
fruit = apples + oranges;
// 开发一个hello.go程序,可以输出"hello,world”
package main
// 导入包
import "fmt"
// 主函数,程序的入口
func main() {
fmt.Println("hello, world")
}