Golang学习笔记(一)

(文章持续更新中...有志同道合的人能够一块儿探讨下。整个系列(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

Go语言简介

Golang是谷歌在2007年开源的。可让你访问操做系统,还提供了强大的网络编程和并发编程支持数据库

具备诸多优点:编程

  • 部署简单
  • 原生并发优点
  • 语言设计良好
  • 执行性能好
  • 自带垃圾回收
  • 编译速度快
  • 代码风格简单
  • 建立大型网络,节省硬件资源
  • Google开源和泰斗级的开发大师
  • 目前性能上接近Java,将来可能超越

Go是静态,编译型语言

自带编译器将源代码编译成二进制格式。二进制文件能够在不一样的平台上运行,解决了跨平台的问题。后端

建立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)
}
复制代码

Go建立一个HTTP 服务器

package main

import (
    "net/http"
)

func main() {
    http.Handle("/", http.FileServer(http.Dir(".")))
    http.ListenAndServe(":8888", nil)
}
复制代码

我的感受Golang在建立http服务器简洁性方面跟Node.js有得一拼

相关文章
相关标签/搜索