(文章持续更新中...有志同道合的人能够一块儿探讨下。整个系列(1~8)准备重写,不过都是很基础的入门笔记,想学到很深刻的东西则不建议阅读...)前端
自学的前端开发,野生程序员,从最初的小白到能够独立完成先后端项目,从域名购买解析到服务器部署,都亲自实践过。最近想着找准方向沉淀下本身。定下了主攻前端,业余研究Golang的小目标,至此开始记录本身的学习历程。程序员
题外话:由于属于自学的,从最初服务器都不知道的懵懂小白到本身搭建LNMP环境,部署发布代码,中间的煎熬过程只有本身知道,深感没人指导,没人教的痛苦。自学有时候一个知识点你可能要3小时才能想明白,可是别人指导一下可能3分钟就解决了。因此后来本身带前端团队的时候尽量多的帮助小伙伴们成长。当初刚入门的时候,一直到技术总监手把手叫我写代码,陪我连续熬了三个通宵以后,我的感受顿悟了,好像不少知识点均可以串联起来懂了原理了,今后自学的路上障碍愈来愈少了,也多是积累到必定程度了吧,可是真心感谢那个陪我熬通宵的技术总监,没有他的指导,不可能有个人今天。web
选择Golang语言的缘由:以前尝试过PHP作后端,用Laravel独立完成事后端项目(Laravel给我感受的确很优雅,ORM也很不错,操做数据库为所欲为)。做为前端程序员,Node.js是必知必会的,也能用Node.js开发后端程序。可是总感受Node.js是创建在C之上的,主观以为隔了一层libuv,多少会影响点性能。由于非科班出身,因此始终对底层的技术保持着敬畏。学C语言感受没勇气,学Java?不想秃顶。。。最终主观臆断的选择学习Golang.我的以为将来物联网,边缘计算,分布式开发是大的趋势,而Golang号称是互联网时代的编程语言,操做底层(docker)到微服务都有相应的解决方案。便可以跟操做系统底层打交道又能够开发web项目,说不定还能够来个弯道超车,对我来讲是再适合不过了。docker
Golang是谷歌在2007年开源的。可让你访问操做系统,还提供了强大的网络编程和并发编程支持数据库
具备诸多优点:编程
自带编译器将源代码编译成二进制格式。二进制文件能够在不一样的平台上运行,解决了跨平台的问题。后端
建立Go程序->编译程序->运行编译获得的可执行文件,是开发Go程序的必要步骤。bash
Go语言在多核并发上拥有原生的设计优点。从底层原生支持并发,无须第三方库、就能轻松充分利用多核CPU服务器。服务器
Go语言重构的系统能使用更少的硬件资源而有更高的并发和 I/O 吞吐表现网络
goroutine 能够理解为一种虚拟线程。Go 语言运行时会参与调度gotoutine 合理地分配到每一个 CPU中。
goroutine之间使用通道(channel)进行通讯
package main
import (
"fmt"
"math/rand"
"time"
)
func producer(header string, channel chan<- string) {
// 不停地生产数据
for {
// 将随机数和字符串格式化为字符串发送给通道
channel <- fmt.Sprintf("%s: %v", header, rand.Int31())
// 等待1秒
time.Sleep(time.Second)
}
}
func customer(channel <-chan string) {
// 不停地获取数据
for {
// 从通道中取出数据, 此处会阻塞直到信道中返回数据
message := <-channel
fmt.Println(message)
}
}
func main() {
// 建立一个字符串类型的通道
channel := make(chan string)
// 建立producer()函数的并发goroutine
go producer("cat", channel)
go producer("dog", channel)
customer(channel)
}
复制代码
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8888", nil)
}
复制代码
我的感受Golang在建立http服务器简洁性方面跟Node.js有得一拼