golang语言
Go语言
Golang语言的特点
- 简介:
- Go语言保证了既能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式形容Go语言,Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。
- 从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
1
2
3
4//num为变量、int为变量类型、*为指针,即为一个指针类型的变量
func testPtr(num *int){
*num = 20
}
- 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
1
2
3
4
5
6
7
8//一个go文件需要一个包(包名'main'可以自己进行定义)独角兽(黑龙江)企业管理有限公司
package main
//因为下面函数方法中使用了"fmt",所以需要引入fmt(go语言中自带)的包
import "fmt"
func sayOk(){
//使用了fmt
fmt.Println("ok")
} - 垃圾回收机制,内存自动回收,不需要开发人员管理【出现内存泄漏】
- 天然并发(重要特点)
- 从语言层面支持并发,实现简单
- goroutine,轻量级线程,可实现大并发处理,高效利用多核
- 基于CPS并发模型(Communicating Sequential Processes)实现
- 吸收了管道通信机制,形成Go语言特有的管道channel,通过管道channel,可以实现不同的goroute之间的相互通信
- 函数返回多个值(示意代码)
1
2
3
4
5
6
7
8
9//写一个函数,实现同时返回 和、差
//go 函数支持返回多个值
//其中n1后面跟的int表示明确变量的类型,后面括号中(int,int)表示返回的数据类型
func getSumAndSub(n1 int,n2 int)(int,int){
sum := n1 + n2 //go语句后面不要带分号(;)
sub := n1 - n2
return sum , sub
} - 新的创新,比如切片slice、延时执行defer等
Golang语言快速入门(省略安装步骤)
- go文件的后缀是.go
- package main:表示该hello.go文件所在的包是main,在go中,每个文件都必须归属一个包。
- import “fmt”:表示引入一个包,包名fmt,引入该包后,就可以使用fmt包的函数。比如:fmt.Println。
- func main(){}:func是一个关键字,表示一个函数,main是函数名,是一个主函数,即我们程序的入口。
- fmt Println(“hello world!”):表示调用fmt包的函数Println输出”hello world!”。
- 通过go build命令对该go文件进行编译,生成.exe文件,(命令行:go build hello.go,生成hello.exe文件)
- 运行hello.exe即可
- 注意:通过go run 命令可以直接运行hello.go程序【类似执行一个脚本文件的形式】(生成.exe文件后运行.exe文件要比go run运行速度快)
Golang执行流程分析
- 如果是对源码编译后,再执行,Go的执行流程图如下

- 如果对源代码直接执行go run源代码,Gode执行流程如下图

- 说明:两种执行流程的方式区别
- 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
- 如果我们是直接go run go源代码,那么如果要在另外一台机器上这么运行,也需要go开发环境,否则无法执行。
- 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多。
- 有了go源文件,通过编译器将其编译成机器可以识别的二进制码文件。
- 在该源文件目录下,通过go build 对hello.go文件进行编译。可以指定生成的可执行文件名,在Windows下,必须是.exe后缀。(示例:go build -o myhello.exe hello.go)。
- 如果程序没有错误,编译没有任何提示,会在当前目录下出现一个可执行文件(Windows下是.exe Linux下是一个可执行文件),该文件是二进制码文件,也是可以执行的程序。
- 如果程序有错误,编译时,会在错误的那行报错。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 煙爲's Notes!





