go

【语言学习】Go语言入门指导

2019-01-03  本文已影响476人  万能的华哥Dean

1 GO语言介绍

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:

它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。

Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。

Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。

Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。

Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。

要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

GO语言历史参考百度百科——很有必要了解下GO的由来,为什么要有GO语言。

2 学习方法

2.1 系统学习法

GO语言都有什么关键字? func, go,chan, for,switch,select,string,int, var等

GO语言基础类型有哪些? int float string等

GO语言代码编写风格? 类C语言风格(func), 类型定义反过来 var num int = 0等

GO语言代码构造? 包的概念package, 外部包引入import等

GO语言提供什么容器? 数组,slice,list,map, hash等

GO语言的独有特性? go协程routine, go的消息传递channel等

2.2 对比学习法

C/C++提供的容器在go语言里面分别对应什么(数组,向量,链表,哈希等)

C/C++提供的STL算法在go语言里面有对应的么

在go语言里面怎么定义变量,有多少种方式?

在go语言里面怎么写循环(for),怎么遍历一个容器?

在go语言里面怎么写判断语句,怎么写方法定义,怎么写对象定义?

Go语言怎么写客户端和服务端开发,用的什么?编码方式和unix socket有什么区别?

等等

3 学习资料

(1)中文论坛:http://www.golangtc.com/

(2)tour of go: http://tour.golangtc.com/welcome/

(3)go doc: http://godoc.golangtc.com/

(4)go学习: http://studygolang.com/

(5)go官网: https://golang.org/

(6)go 源项目: https://github.com/golang/go golang是开源的,你能看到go语言的实现源码。

(7)go 培训:(所有特性的例子代码) https://github.com/GoesToEleven/GolangTraining

值得全部例子都跑一边,对比学习的时候看源码,自己改改写写是最好的方式。

4 GO开发环境搭建

4.1 源码安装

源码/安装包下载目录:https://golang.org/dl/

Go1.4: go1.4.src.tar.gz

Go1.6: go1.6.src.tar.gz

注意,go编译器一开始用c语言编写1.4版本和以前版本(可以从开源库上可以看到), 1.4之后的版本使用go语言自身把编译器重写了一遍,所以1.4后面的版本编译的基础是本机已经有编译好的go1.4,linux默认/root/go1.4目录找go。如果没有安装go1.4,在编译之后的版本的时候会有报错找不到go1.4。

解压并编译到:

/root/go1.4

/root/go1.6

4.2 下载包含go编译器的可执行版本

源码/安装包下载目录: https://golang.org/dl/

Go1.x.x: go1.x.x.linux-amd64.tar.gz 64位的

解压到:

/root/go1.x

最新稳定版1.10

Go语言版本说明,如果对于版本有选择困难症的可以读一读这个,根据版本功能特性选择适合自己的版本。

4.3 环境变量配置

Go命令识别,需要配置Go 的编译器所在目录 GOROOT, 配置方法如下:

在/etc/profile 中添加:

export GOROOT=/root/go1.6

export PATH=PATH:GOROOT/bin

终端执行source /etc/profile 使环境变量生效。

4.4 Helloworld例子验证

4.4.1 指定GO工作环境, GOPATH

export GOPATH=/home/goexample


4.4.2 创建基本工作目录,并创建helloworld源码

4.4.3 编译运行

5 GO tools

go env 查看go相关的环境变量设置

go build 编译

5.3 go install 编译并安装到GOPATH的bin下

5.4 go test 单元测试

5.5 go run 直接运行

5.6 go get 依赖包安装

依赖包会安装到GOPATH/src/下

6 所有go特性例子代码

值得全部编译运行一遍

代码地址:https://github.com/GoesToEleven/GolangTraining

7 GO语言关键知识点

Go channel

Go routine

Go package

Go import

Go net/tcp

Go 编写服务端采用的服务模型,跟epoll,select,以及libevent什么区别。

8 Go实战进阶

8.1 Google protobuf

——go protobuf 协议打包和解包,自定义协议,远程服务,高并发服务

8.2 Facebook thrift

——go thrift RPC调用,分布式服务

8.3 Go Web

——web开发框架 Go web:

8.4 Go API Server

——Restful http/https标准,API server标准接口

8.5 GO语言开源框架汇总

https://github.com/avelino/awesome-go

9 可能会碰到的问题

9.1 问题1——网站无法访问

Go相关的官网和技术网站无法访问?

因为你的确是需要一个VPN,请私聊。或者自己想办法。

9.2 问题2——划重点

按照指导的还一头雾水,不知道怎么入手!

ok,给你划重点:

1)对比学习法(这个适用于已经有其他语言基础和一定时间开发项目经验的人),没有语言基础的(毕业生)请选择系统学习法。

2)Go相关的网址推荐全部加入到你的浏览器收藏夹(我的浏览器有100个目录,你觉得你是不是需要跟下风)

3)环境搭建好之后,把go的所有命令行工具的例子都跑一遍(这个可以结合第4)点做。

4)结合6章节的例子进行学习(默认你应该每个例子都go build 和运行一下)。

9.3 问题3——Go实战进阶

ok,对的,它不一定适合你,但是在现在基于docker,k8s,以及微服务的开发模式下,你还是要对RestAPI, rpc等技术的熟悉,对http/https协议的精通,并能应用到项目中。

这个可选吧:基于proto buf的socket编程(或许有一天没人知道socket编程是啥了吧)

另外Go访问数据库(如Mysql)有类似ORM的机制是个很不错的设计模式。

第一篇文章就写着么多吧,下一篇会考虑写一下关于现在使用Golang涉及到的一些框架和应用;

欢迎随时联系我交流编程技术;

欢迎加入华哥Dean的“Go编程”知识星球。

我正在「Go编程」和朋友们讨论有趣的话题,你一起来吧?

https://t.zsxq.com/qrVBqvF

上一篇 下一篇

猜你喜欢

热点阅读