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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容