Golang语言概述

  1. 简介

    Golang,简称Go语言,由C语言设计者设计(区块链研发工程师、Go服务器端/游戏软件工程师、Golang分布式/云计算软件工程师)

  2. 应用领域

    1. 区块链技术,分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。
    2. 后端服务器应用,美团后台流量支撑程序(排序、推荐、搜索等),提供负载均衡、cache、容错、按条件分流、统计运行指标。
    3. 云计算/云服务后台应用
  3. Go语言的诞生:

    核心开发团队:

    1. Ken Thompson(肯 汤普森)图灵奖,美国国家技术奖,Unix原创者,飞行员,C语言,B语言;
    2. Rob Pike(罗布 派克),贝尔实验室,UTF-8,脱口秀,1980年奥运会射箭银牌,天文学家,伽马望远镜;
    3. Robert Griesemer Java编译器。

    Google发明Go的原因:计算机硬件技术更新频繁,主流编程语言明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能;缺乏一个简洁高效的编程语言【现有的编程语言:1. 风格不统一 2. 计算能力不够 3. 处理大并发不够好】;C/C++存在内存泄漏的问题

  4. Go语言发展简史

    1. 2007年开始设计
    2. 2009.11.10全球发布
    3. 2015.8.19 Go1.5版发布,本次更新中移除了”最后残余的C代码
    4. 2017.2.17 Go1.8
    5. 2017.8.24 Go1.9 1.9.2
    6. 2018.2.16 Go1.10
  5. Go语言的特点

    1. 静态编译语言的安全和性能、动态语言开发维护的高效率 Go = C + Python。
    2. 从C语言中继承了很多概念,包括表达式语法、控制结构、基础数据类型、调用参数传值、指针等等,也保留了和C语言一样的编译执行方式及弱化指针。
    3. 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
    4. 垃圾回收机制,内存自动回收,不需要开发人员管理。
    5. 天然并发。
      1. 从语言层面支持并发,实现简单
      2. goroutine,轻量级线程,可实现大并发处理,高效利用多核
      3. 基于CPS(Communicating Sequential Processes)并发模型实现
    6. 吸收了管道通信机制,channel
    7. 函数返回多个值
    8. 心的创新:比如切片slice、延时执行defer等
  6. 开发工具

    1. Visual Studio Code
    2. Sublime Text
    3. Vim/Vi
    4. Emacs
    5. Eclipse IDE
    6. LiteIDE
    7. JetBrains
  7. 开发环境的搭建(安装和配置SDK)

    1. SDK(Software Development Kit)软件开发工具包,提供给开发人员使用,其中包含了对应开发语言的工具包

    2. 下载SDK链接: https://golang.google.cn/dl/

      1. windows下建议使用:go1.9.2.windows-amd64.zip
      2. linux下建议使用:go1.9.2.linux-amd64.tar.gz
      3. mac下建议使用:go1.9.2.darwin-amd64.pkg
    3. 配置环境变量

      1. 根据Windows系统在查找可执行程序的原理,可以将Go所在路径定义到环境变量中,让系统帮我们去找运行执行的程序,这样在任何目录下都可以执行go指令。
      2. 在Go开发中,需要配置GOROOT(指定SDK安装路径d:/goSDK/go)、Path(添加SDK的/bin目录)、GOPATH(工作目录,将来我们的go项目的工作)
      3. 重新打开cmd测试,任意目录下,go和go version
  8. Go快速入门

    1. 开发步骤:

      1. 安装vscode

      2. 将go代码写入.go文件

      3. 目录结构 alt

      4. 代码

        1. package main//每个文件必须归属于一个包
        2. impor"fmt"//引入包,可以使用包内函数
        3. func main(){//func关键字,表示一个函数,main是函数名(程序入口)
        4. fmt.Println("hello, world!")//调用fmt包内函数输出
      5. 通过go build命令对go文件进行编译,生成.exe可执行文件(在cmd中cd到main目录下)“go build hello.go"

      6. 执行.exe文件(cmd中直接输入hello.exe回车)

      7. 通过go run命令可以直接运行hello.go程序(类似执行一个脚本文件的形式)"go run hello.go"

    2. 两种执行流程方式的区别

      1. 如果编译生成了可执行文件,可将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
      2. 如果是直接go run,要在另外一个机器运行,也需要go开发环境,否则无法执行
      3. 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多
    3. 编译时生成其他名字的可执行文件”go build -o myhello.exe hello.go"

    4. 注意事项

      1. go源文件必须以go为扩展名
      2. go应用程序的执行入口是main()函数
      3. go语言严格区分大小写
      4. go方法由一条一条语句构成,每个语句后不需要分号(go语言在每行后自动加分号)
      5. go编译器是一行一行进行编译的,因此一行只能写一条语句,否则报错
      6. go语言定义的变量或者import的包如果没有使用到,编译不能通过
      7. 大括号必须成对出现
    5. go语言常用转义字符(escape char)

      1. \t 制表符(排版对齐)
      2. \n 换行
      3. \ 转义字符
      4. \r 回车(从当前行的最前面开始输出,覆盖掉以前的内容)
    6. 注释

      1. 行注释//(ctrl+/)
      2. 块注释(多行注释)/xxx/
      3. 注意:块注释内不能再嵌套块注释
    7. 规范的代码风格

      1. 尽量使用行注释
      2. 正确的缩进和空白(shift+tab向左移动,tab向右移动)(gofmt main.go调格式文件不变)(gofmt -w main.go调格式文件也改变)
      3. 运算符两边加空格
      4. 大括号必须紧跟在小括号后边,不允许换行(设计理念:一个问题尽量只有一个解决方法)
      5. 建议每一行不超过80个字符,太长的代码用逗号换行隔开
    8. go官方编程指南

      1. https://golang.org/#
      2. API(application program interface)应用程序变成接口
    9. go标准库API文档

      1. golang中文网,在线标准库文档:https://studygolang.com/pkgdoc