Go 是一门开放源码的编译型编程语言,可容易的构建简单、可靠和高效的软件
Go 语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年开始设计,利用 20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开源)首次公开发布,于 2012 年正式发布。
开发者使用编程语言的三大分类(执行速度、简易程度、开发难度):
执行速度快、编译速度慢(编译型):C,C++
执行速度较慢、编译速度快(解释型): JAVA,.NET
执行速度慢、开发难度小(动态脚本):Python,PHP
Go 语言在 3 个条件做了平衡:易于开发、快速编译、高效执行
Go 语言被称为 21 世纪的 C 语言,Go 从其他开发语言的借鉴了许多优秀的设计思想,例如从C 语言借鉴表达式、流程控制、基础数据类型、参数传递、指针等,从 Oberon-2 语言借鉴的包的导入和声明等,从 Oberon 语言借鉴的面向对象特性中方法的声明语法,从Limbo 语言中借鉴的 CSP(通信顺序进程, communicating sequential processes),从 APL 语言借鉴的 iota 语法,从 Scheme 语言借鉴的作用域和嵌套函数……
? 静态类型并具有丰富的内置类型: bool、byte、rune、int、float、string、array、slice、map
? 函数多返回值
? 错误处理机制:使用 defer、panic、recover 定义标准的错误流程
? 语言层并发:使用关键字go将函数以Goroutine方式运行,使用CSP模型作为Goroutine的通信方式
? 面向对象:使用类型、组合、接口来实现面向对象思想
? 反射
? CGO:用于调用 C 语言实现的模块
? 自动垃圾回收
? 静态编译
? 交叉编译
? 易于部署
? 基于 BSD 协议完全开放
Go 语言主要用于服务端开发,其定位是开发大型软件,常用于:
? 服务器编程:日志处理、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等
? 网络编程:Web 应用、API 应用、下载应用
? 内存数据库
? 云平台
? 机器学习
? 区块链
? ……
使用 Go 开发的项目列表:https://github.com/golang/go/wiki/Projects
? Go
? docker
? kubernetes
? lantern
? etcd
? Prometheus
? Influxdb
? Consul
? nsq
? beego
? ……
使用 Go 开发的组织:http://go-lang.cat-v.org/organizations-using-go
? 国外:Google、CloudFlare……
? 国内:阿里、腾讯、百度、京东、爱奇艺、小米、今日头条、滴滴、美团、饿了么、360、七牛、B 站、盛大、搜狗……
Golang程序下载地址:
https://golang.google.cn/dl/
具体安装步骤省略
比如go1.14.9.windows-amd64.msi安装成功后
配置一下国内代理,这里选用七牛云的
go env -w GOPROXY=https://goproxy.cn,direct
GOPROXY配置国内代理后,即可下载相关插件
命令行窗口
go env 命令验证
helloWorld.go
package main // 声明包名main
//Go 源文件开头必须使用 package 声明代码所属包,包是 Go 代码分发的最基本单位。若程序需要运行包名必须为 main。
import "fmt" //导入fmt包
//import 用于导入程序依赖的所有的包
func main() { //func 用于定义函数。main 函数是程序的入口,若程序需要运行必须声明 main 函数,main函数无参数也无返回值
fmt.Println("Hello World") //调用fmt包的Prinln控制台打印Hello World字符串
}
go build helloWorld.go //用于编译&链接程序或包
helloWorld.exe //执行编译后的可执行程序
常用参数:
-x: 打印编译过程执行的命令,并完成编译或运行
-n: 只打印编译过程执行命令
-work:打印编译过程的临时目录
-o: 指定编译结果文件
go build: 用于编译&链接程序或包
go build -work -x -o helloworld.exe main.go
go run:用于直接运行程序
go run -work -x main.go
go clean:清除编译文件
标识符是编程时所使用的名字,用于给变量、常量、函数、类型、接口、包名等进行命名,以建立名称和使用之间的关系,Go 语言标识符的命名规则:
只能由非空字母(Unicode)、数字、下划线(_)组成
只能以字母或下划线开头
不能 Go 语言关键字
避免使用 Go 语言预定义标识符
建议使用驼峰式
标识符区分大小写
Go 语言提供一些预先定义的标识符用来表示内置的常量、类型、函数,在自定义标识符时应避免使用:
内置常量:true、false、nil、iota
内置类型:bool、byte、rune、int、int8、int16、int32、int64、uint、uint8、unit16、unit32、unit64、uintptr、float32、float64、complex64、complex128、string、error
内置函数:make、len、cap、new、append、copy、close、delete、complex、real、imag、panic、recover
空白标识符:_
Go 语言定义 25 关键字:
声明:import、package
实体声明和定义:chan、const、func、interface、map、struct、type、var
流程控制:break、case、continue、default、defer、else、fallthrough、for、go、goto、if、range、return、select、switch
字面量是值的表示方法,常用与对变量/常量进行初始化,主要分为:
标识基础数据类型值的字面量,例如:0, 1.1, true, 3 + 4i, ‘a‘, "我爱中国"
构造自定义的复合数据类型的类型字面量,例如:type Interval int
用于表示符合数据类型值的复合字面量,用来构造 array、slice、map、struct 的值,例如:{1, 2, 3}
小括号()
中括号[]
大括号()
分号;
逗号,
声明变量的 var
声明常量的 const
声明函数的 func
声明类型的 type
Go语言所提供的是尽量简单的语法和尽量完善的库,以尽可能降低问题的发生概率。当然,问题还是会发生的,这时需要用到问题追踪和调试技能。这里我们简单介绍下最常规的问题跟踪方法之一:打印日志
package main
import "fmt"
func main() {
fval := 110.48
ival := 200
sval := "This is a string. "
fmt.Println("The value of fval is", fval)
fmt.Printf("fval=%f, ival=%d, sval=%s\n", fval, ival, sval)
fmt.Printf("fval=%v, ival=%v, sval=%v\n", fval, ival, sval)
}
//结果
The value of fval is 100.48
fval=100.48, ival=200, sval=This is a string.
fval=100.48, ival=200, sval=This is a string.
fmt包的这一系列格式化打印函数使用起来非常方便,但在正式开始用Go开发服务器系统时,我们就不能只依赖fmt包了,而是需要设计严格的日志规范。Go语言的log包提供了基础的日志功能。如果有需要,你也可以引入自己的log模块。
Go语言已经发展了几年时间,凭借着语言本身的优越品质和Google的强大号召力,在推出正式版本之前就已经拥有了广大的爱好者和社区,本节就介绍一些不错的Go语言社区。在遇到问题时,请随时访问这些社区,并勇敢地提问,相信你能得到满意的解决方法。
原文:https://www.cnblogs.com/Otiger/p/13713055.html