Golang发展历史
1. 诞生历史
a. 诞生与2006年1月2号下午15点4分5秒
b. 2009发布并正式开源
c. 2012年第一个正式版本Go 1.0发布
d. 截至到2017年8月24号Go 1.9版本正式
GO环境搭建
1. Go安装
a. 打开Golang官网, https://golang.org/dl/
b. 选择window安装包进行下载
c. 双击安装
https://github.com/pingguoxueyuan/gostudy/tree/master/listen1
2. Git 工具安装
a. 有效的、分布式的代码管理工具
b. 下载地址:https://git-scm.com/downloads
c. 点击安装包进行安装
3. IDE搭建(vscode)
a. 打开?址:https://code.visualstudio.com/
b. 根据操作系统选择对应的安装包
c. 点击安装包进?安装(linux直接解压)
d. 选择查看-》扩展-》搜索go,安装第2个
4. GOPATH设置
a. GOPATH是一个环境变量,用来表明go项目的存放路径
b. GOPATH路径最好只设置一个,所有的项目都放到GOPATH的src目录下
c. GOPATH的目录结构介绍
第一个程序
package main import "fmt" func main(){ fmt.Println("hello world") }
包的概念
1. 和python一样,把相同功能的代码放到同一个目录,称之为包
2. 包可以被其他包引用
3. main包是用来生成可执行文件,每个程序只有一个main包
4. 包的主要用途是提高代码的可复用性
GO 命令的基本介绍
a. go run 快速执行go文件,就像执行脚本一样
b. go build 编译程序,生成二进制执行文件
c. go install 安装可执行文件到bin目录
d. go test 执行单元测试 和 压力测试
b. go env 显示go相关的环境变量
c. go fmt 格式化源代码
GO 程序结构
GOPATH 目录下
a. go源码按package进行组织,并且package要放到非注释的第一行
b. 一个可执行程序只有一个main包和一个main函数
c. main函数是程序的执行入口
注释
b. 多行注释 /* */
a. 单行注释
GO 语言的特性
1. 垃圾回收
a. 内存自动回收,再也不需要开发人员管理内存
b. 开发人员专注业务实现,降低了心智负担
c. 只需要new分配内存,不需要释放
2. 天然并发
a. 从语言侧面支持并发,非常简单,只需要go一下
b. goroutine,轻量级线程,创建成千上万个goroute成为可能
模板
func calc() { //?量计算 } func main() { go calc() }
举例
1.串行
package main import "fmt" import "time" func aa(){ for i:=0; i<=10;i++{ time.Sleep(1*time.Second) fmt.Println("执行", i , "次") } fmt.Println("aa is ok") } func main(){ aa() fmt.Println("主函数执行完了") }
结果
使用go 实现"并发"
package main import "fmt" import "time" func aa(){ for i:=0; i<=10;i++{ time.Sleep(1*time.Second) fmt.Println("执行", i , "次") } fmt.Println("aa is ok") } func main(){ go aa() // 只需要加上 go就可以了 fmt.Println("主函数执行完了") time.Sleep(15*time.Second) }
结果
3. channel
a. 管道,类似unix/linux中的pipe
b. 多个goroute之间通过channel进行通信
c. 支持任何类型
4. 多返回值
a. 一个函数返回多个值
返回一个值
package main import "fmt" func add(a int, b int) int { return a + b } func main(){ sum := add(3, 6) fmt.Println(sum) }
返回多个值
package main import "fmt" func add(a int, b int) int { return a + b } func aa(a int, b int) (int, int) { return a +b , a-b } func main(){ sum := add(3, 6) he, cha := aa(6, 9) fmt.Println(sum) fmt.Println(he, cha) }
5. 编译性语言
1.性能只比c差10%
2. 开发效率和python, php差不多
原文地址:https://www.cnblogs.com/ctztake/p/10223051.html