Go 语言学习笔记 -第1章
@(Golang)
[toc]
学习方向
1、区块链研发
2、Go服务端 数据处理、处理大并发/游戏软件
3、Go分布式/云计算
应用领域
1、区块链应用
区块链技术,简称BT (Blockchain Technology)
是一种互联网数据库技术,其特点是去中心化、公开透明、让每个人均可以参与数据库记录
2、后端服务器应用
美团后台流量支持程序:
支撑主站后台流量(排序、推荐、搜索等),提供负载均衡、Cache、容错、按条件分流、统计运行指标(QPS、Latency)等
网游:
游戏服务器(通讯、逻辑、数据存储)
3、云计算、云服务后台应用
盛大云CDN(内容分发网站):
应用范围:CDN的调度系统、分发系统、监控系统、短域名服务、CDN内部开放平台、运营报表系统等其他小工具等
京东云消息推送:
应用范围:后台所有服务全部用go实现
golang的计算能力强
如何学习
1.学习方法总结:
1、高效学习?2、整体框架->细节
3、快速学习
4、Know how-> Know why
5、多琢磨别人怎么做的?
6、技术细节
2.快速深入学习新技术方法
需求:
1、项目开发时候,需要解决某个问题
2、跳槽、学习新技术
先看看使用现有的技术能否解决:
可以解决
1)使用传统的方法可以解决,但是不够好
2)使用新技术
学习新技术或者知识点
1)原理
2)基本语法
快速入门
1)简单
2)了解新技术或者知识点的基本使用
这里不需要涉及技术细节
这里体现水平
讨论新技术或者知识点细节 -很重要
1)怎么使用更规范
2)使用陷阱
3)需要使用时,注意什么....
Go语言发展
为什么要创建Go语言
1、能够充分发挥硬件功能2、缺乏足够简洁高效编程语言
3、编译速度慢?内存泄漏?
Go语言发展
Go语言特点
保证了既能到达静态编译语言的安全和性能,又达到动态语言开发维护的高效率
Go = C+ Python
1、从C语言中继承了很多理念、包括表达式语法、控制结构、基础数据类型、参数传值、指针等
也保留了和C语言一样的编译执行方式以及弱化的指针
//指针
func testPtr(num *int){
*num = 20
}
2、引入包的概念、用于组织程序结构,Go语言的每一个文件都要归属于一个包、而不能单独存在
package main
3、垃圾回收机制、内存自动回收、不需要开发人员管理【出现内存泄漏】
4、天然并发
1)从语言层面支持并发、实现简单2)goroutine,轻量级线程、可实现大并发处理、高效利用多核
3)基于CPS并发模型(Communicating Sequential Processes)实现
5、吸收管道通信机制、形成Go语言特有的管道Channel
通过管道Channel, 可以实现不同的goroutine之间的相互通信
6、函数返回多个值
func getSumAndSub(n1 int, n2 int)(int, int){
sum := n1 + n2 //go语句不用带分号
sub := n1 - n2
return sum, sub
}
7、新的创新、切片slice、延迟执行defer等
题外话
- Go语言里所有
首字母大写的一般是public方法,首字母小写不能直接调用
- Golang严格禁止浪费,所有
没使用的变量、包都会被编译器报错
- Golang
严格区分大小写
Go快速入门
1.go的安装下载 官方地址
看一个例子:
main.go
package main //声明文件的package
import "fmt"
//入口函数, 无参数, 无返回值
func main() {
/*
多行注释
天生支持utf-8
*/
fmt.Println("hello world, 你好")
}
这里要注意几点
1.GO程序是通过package来组织的2.只有package名称为main的包可以包含main函数
3.一个可执行程序有且仅有一个main包
4.用于输出的包, 不能包含没有用到的包, 否则会报错
2.解释执行
go run test.go
3.编译执行
go build test.go //生成exe文件,执行就可以,默认生成的可执行文件是当前文件名
./test
//可以使用-o 来指定生成的文件名称
Go执行流程分析
流程分析
go 文件->go build(编译)->可执行文件->运行->结果
go 文件->go run(编译运行一步)->结果
区别
1、如果先编译生成可执行文件、可以将可执行文件拷贝到没有go开发环境机器上 仍然可以运行
2、如果直接go run go源码,如果在另外一个机器上运行,也需要go环境,否则无法执行
3、在编译中,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大很多
4、通过go build 可以指定生成的二进制文件
go build -o main.exe test.go
5、如果程序有错误, 编译会报错
GO环境变量与工作目录
GOPATH下需要建立三个目录
bin -存放编译生成的可执行文件pkg-存放编译后生成的包文件
src-存放项目源码
go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,
但现在官方更提倡go mod