Go语言是最近几年最流行的语言之一,不同于应为机器学习和大数据以及使用简单而致使Python的流行,Go语言的流行可以说是因为其优秀的性能
以及出色的开发速度和应用方式。
Go语言又被称之为NextC,保留了指针的基础上,阻止了指针运算,这样使得垃圾回收(GC)可以不通过程序员去完成,且其代码完全支持UTF-8编码,
完全的异步处理使得多核CPU得到了用武之地。
而Docker以及Go1.5版本以后均是由Go语言实现的。
Go语言的常用环境:
- 微服务,Web类型服务器,优秀的性能和并发操作提供
- 基础软件或者是云计算基础设施领域,Docker以及云服务器的众多服务提供
- 数据文件系统的打包或者是日志信息处理等系统软件
Go并非是一门面向对象的语言,其本身不支持继承和类,同时不支持自定义泛型,GC采用的是并发的标记清除算法(Concurrent Mark and Sweep,CMS)在进行GC时会停止用户的任何操作。
Go的运行性能非常突出,通过自带的编译器将Go语言文件编译成二进制的可执行文件,通用算法的性能与C相比仅仅相差10-20%之间,在单核性能不如Java但是相差无几,多核性能超过了Java。
可以在Golang的官网中下载相应版本的安装包并且进行本机的安装,除此之外不需要任何的代码环境的安装,当然可以选择一款更加好用的IDE用来代替写字板。
无论是否下载的是可安装的版本或者是下载代码进行编译,最终安装结果需要在CMD(命令行工具)中支持使用go命令,如下图所示。
示例:
# 确定函数入口包名称,main包
package main
# 引入http包
import (
"net/http"
)
# 入口主函数
func main() {
# 路由处理和接口监听
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8080", nil)
}
使用go run test.go
可以运行该代码,启动一个http服务器,并且监听8080端口,如下图1所示
目录结构
- src目录:项目和库的源文件
- 每个文件都是采用包的形式进行放置的,每一个属于该包的代码是存放于该包名称的文佳佳中的
- pkg目录:编译后生成的包/库的归档文件
- 如果使用了
go install
命令安装了相应的包,则存放在该文件夹下.a结尾
- 如果使用了
- bin目录:放置编译后生成的可执行文件
在go1.13以上的版本中,已经包含了包管理工具,但是需要设置其默认下载地址为中国镜像,如下方的命令进行设置:
- windows:
set GO111MODULE=on 或者 set GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn,direct
-linux
export GO111MODULE=on 或者 export GO111MODULE=auto
export GOPROXY=https://goproxy.cn
使用go module初始化一个项目工程 go mod init
HelloWorld
package main
import(
// 打印内容的引入
"fmt"
)
func main(){
fmt.Printf("HelloWorld")
}
Go语言基本语法结构
-
变量
-
采用
var 变量名 变量类型
的方式进行命名- 默认整型(0),浮点型(0.0),字符串(‘’),bool类型(bool),指针(nil)
- 如果需要初始化使用
var 变量名称 类型 = 表达式
的形式
-
可以采用
变量名称:=表达式
方式进行命名(需要显式初始化、且只能在函数内部使用)- 在多个短变量声明和赋值中,采用简短命名的方式如果有一个新的变量名称则不会报错
-
Go语言的字符有两种,unit8类型byte,Unicode的一个字符,rune类型一个Unit-8字符(中文)
-
数据类型的转化:
类型 B 的值 = 类型 B(类型 A 的值)
只有相同底层类型的变量支持这样转化- string 与 int 类型之间的转换
- Itoa():整型转字符串
- Atoi():字符串转整型
- 将符串和 bool 类型
- ParseBool() 将字符串转换为 bool 类型
- ParseInt()返回字符串表示的整数值(可以包含正负号)
- ParseUnit()函数的功能类似于 ParseInt() 函数,但 ParseUint() 函数不接受正负号
-ParseFloat() 函数用于将一个表示浮点数的字符串转换为 float 类型
- string 与 int 类型之间的转换
-
指针:
- Go中的指针可以支持直接访问当一个指针被定义后没有分配到任何变量时,它的默认值为 nil
- Go语言在变量前加
&
符号用于访问该变量的内存地址,*
操作符用于获得指针的值(需要获得地址) - 指针的值是带有0x十六进制前缀的一组数据,对该地址进行
*
操作可以取得该地址的值 - 可以使用new关键字来新建指针
new(类型)
-
-
常量
- 使用const 定义常量可以显示或者隐式定义类型
-
容器类型
- 数组:
var 数组变量名 [元素数量]Type
- 数组长度的位置出现“…”省略号,则表示数组的长度是根据初始化值的个数来计算
- 数组:
-
语句
- 循环只有for语句
- switch语句中case为独立代码块,不需要break跳出
-
函数
- Go中的函数本身为一种值,可以用于直接传递回调等
- Go中没有构造函数,可以通过结构体来模拟实现构造函数
注意:Go语言中不允许引入没有使用的包,并且需要所有的花括号均采用跟随语句的写法,而不是另起一行