Go并发编程实战学习(一)

mb6013c048b8fe2 · · 1452 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Go语言基础概念

go语言特点

  1. Go从表面看起来和C相似,基于多种语言的优点
  • 并发功能
  • 数据抽象
  • 面向对象
  • 垃圾回收
适合构建基础设施类软件(如网络服务器),以及开发的工具和系统云计算时代的C语言

go语言特性

  1. 静态类型和编译型:变量和常量在声明时指定类型,且不可改变
  2. 跨平台
  3. 自动垃圾回收
  4. 原生的并发编程:并发编程模型的组成部分
  • goroutine (Go例程)
  • channle (通道)
多编程范式:Go支持函数式编程
  • 函数类型为第一等类型
  • 面向对象编程:接口类型和实现类型、嵌入替代继承
丰富的标准库

工程结构

工作区

Go源码文件必须存放在工作区中,是一个对应于特定工程的目录

  • src目录:用于以代码包的形式组织并保存Go源码文件

  • pkg目录:存放通过go install命令安装后的代码包的归档文件(名称以 “.a” 结尾的文件)

  • bin目录:和pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码生成的可执行文件

GOPATH

实际开发环境中有一个或多个工作区,这些工作区的目录路径都需要添加到GOPATH中

源码文件

  1. 命令源码文件

    源码文件声明属于main代码包,且该文件代码中包含无参数声明和结果声明的main函数,可通过go run命令直接启动运行

  2. 库源码文件

  3. 测试源码文件

代码包

  1. 包声明:源码文件都必须以包声明语句作为文件中代码的第一行

    gopcp.v2/helper/log/base包中的源码文件声明属于代码包:   
    package "base"
       -- 包名是代码包路径的最后一个元素
    -- 命令源码文件存放在哪个代码包中,都必须声明属于mian包复制代码
  2. 包导入:为当前代码包导入依赖的子包

  • 标识符的命名规则:Unicode字符集中任意能表示自然语言文字的字符、数字、下划线,但是标识符不能以数字或下划线开头

  • 程序实体的访问权限:标识符首字母的大小写

  • 只想初始化某个代码包,而不需要在当前源码文件中使用那个代码包的任何程序实体,使用_代替别名

    import (
    	_"github.com/Sirupsen/logrus"
    )复制代码
  • 大写:可以被本代码包之外的代码访问到
  • 小写:只能被本包内的代码访问
  1. 导入单个代码包

    import "gopcp.v2/helper/log/base"复制代码
  2. 导入多个代码包:圆括号括起来;每个代码包名独占一行

    import (
    	"gopcp.v2/helper/log/base"
    	"gopcp.v2/helper/log/logrus"
    )复制代码
  3. 为包设置别名:如果同一个源码文件的多个代码包的最后一个元素重复

    import (
    	"github.com/Sirupsen/logrus"
    	mylogrus "gopcp.v2/helper/log/logrus"
    )复制代码

    不加前缀直接调用某个依赖包中的程序实体 -- 使用 “.” 代替别名

    import (
    	."gopcp.v2/helper/log/logrus"
    )复制代码

    则调用过程可以写成:

    var logger = NewLogger("gopcp") //NewLogger是gopcp.v2/helper/log/logrus包中函数

    程序实体:Go中的变量、常量、函数和类型声明统称为程序实体

包初始化:Go中有专门的初始化函数负责代码包初始化

func init(){
	fmt.Println("Initialize...")
}复制代码

包初始化的顺序

  1. 导入包的初始化函数
  2. 当前代码包的全局变量
  3. 当前代码包的初始化函数
  4. main函数

标准命令

build

go build命令用于编译指定的源码文件或代码包以及它们的依赖包

  • 命令源码文件被编译成可执行文件,并存放到 命令执行的目录或指定目录下
  • 库文件源码不会在非临时目录中留下任何文件
clean

go clean命令用于清除因执行其他go命令遗留下来的临时目录和文件

fix

go fix命令用于修正指定代码包的源码文件中包含的过时语法和代码调用,使得升级Go语言版本时可以非常方便的同步升级程序

fmt

go fmt命令用于格式化指定代码包中的Go源码文件

get

go get命令用于下载、编译并安装指定的代码包以及其依赖包

install

go install命令用于编译并安装指定的代码包及其依赖包

list

go list命令用于显示指定代码包中的信息,进行代码包分析

run

编译并运行指定的命令源码文件,不生成可执行文件而直接运行命令源码文件

test

go test 命令用于测试指定的代码包,前提是该代码包目录中必须存在测试源码文件

tool

go tool用于运行Go语言的特殊工具

vet

go vet命令用于检查指定代码包中的Go语言源码,并报告发现可疑代码问题(除了编译以外的又一个程序检查方法)

version

显示当前安装的Go语言的版本信息以及计算环境

  • 执行标准命令时可以添加的特殊参数
  1. -a
  2. -n
  3. -race
  4. -v
  5. -work
  6. -x
  • Go语言的两个工具【Go程序调优】
  1. pprof

    分析CPU、内存、程序阻塞概要文件,并根据要求提供高可读性的输出信息

  2. trace

    读取Go程序踪迹文件,并以图形化的方式展现出来,深入了解Go程序在运行过程中的内部情况

  • 当前进程中堆的大小及使用情况
  • 程序中的多个goroutine如何调度以及某个时刻被调度的原因

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6013c048b8fe2

查看原文:Go并发编程实战学习(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1452 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传