第一章:Go语言概览

golang-gopher.png

1. go语言概述

Go语言是在2009年11月10日 由Google开源的一门编程语言.号称是"21世纪的C语言"

Go 语言(或称 Golang)是云计算时代的 C 语言。 Go 语言的诞生是为了让程序员有更高的
生产效率, Go 语言专门针对多处理器系统应用程序的编程进行了优化,使用 Go 编译的程
序可以媲美 C 或 C++代码的速度,而且更加安全、支持并行进程。

1.1 golang的语言特点

  • C语言中继承了很多设计理念,如表达式语法,结构控制,基础数据类型,传值,指针

  • 开放源代码 ,Go本身是用Go语言编写的

  • 是静态型和编译型

  • 引入 的概念,用于组织程序结构

  • 自动垃圾回收,一般由Go运行时系统负责

  • 天然支持并发

    • 从语言层面就支持并发,使用很简单

    • goroutine,协程,高效利用CPU

    • 基于CSP并发模型

    • 采用管道通信机制,通过管道channel 实现不同goroutine之间的相互通信

  • 函数可以多返回值

  • 新颖的slice 和defer语句引入

  • go编写的程序可以直接编译成机器码,不依赖其他库,以及跨平台编译

  • 内置强大的工具链

  • 丰富的标准库, 特别是网络库很强大

  • 内嵌C代码支持

  • 语法简单,代码风格强制统一

1.2 go语言适合做什么

  1. 区块链应用
  2. 服务器编程,如: 处理日志,文件系统,数据打包,虚拟机处理
  3. 网络编程 ,如API应用,web应用,下载应用
  4. 分布式系统
  5. 云平台/云服务后端开发
  6. 内存数据库

1.4 go语言学习资料参考

1.4.1 网络资料

Go语言中文网

Go语言中文文档

Go语言标准库中文文档

Go语言圣经(中文版)

Go中国技术社区

Golang技术论坛

1.4.2 推荐书籍

《Go程序设计语言》

《Go语言学习笔记》

《Go并发编程实战》

2. go程序是怎么运行起来的?

2.1 GO语言的开发环境

  1. 无论是Windows 环境或者是Linux环境,亦或是Mac 环境都需要下载Go语言的 SDK ,下载地址如下 Go安装包下载地址 ,具体安装细节参看 安装说明

  2. 安装包安环好之后有两个环境变量需要注意(GO语言开发这两个环境变量一定要配置好)

    1. GOROOT : Go语言SDK的安装路径需要配置到系统环境变量中去
    2. GOAPTH : Go语言项目的存放路径,也就是工作目录
  3. 搭建开发环境

  4. window10 系统 搭建步骤(window10 下搭建相对简单)

  5. golang中国 下载window的安装包(注意是32位还是64位系统)

  6. 下载的安装包可以直接安装(记住自己的安装路径,在配置系统环境变量的时候用到,安装路径尽量不要带中文 )

  7. 配置系统环境变量

  8. Ubuntu18

    1. 下载安装包文件

      wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
      
    2. 安装文件文件

      mv go1.12.7.linux-amd64.tar.gz /opt
      sudo tar -zxvf go1.12.7.linux-amd64.tar.gz
      
    3. 配置Golang环境变量

      vim /etc/profile
      

      使用vim打开profile文件,并在文件内容最末端添加如下内容

      export GOROOT=/opt/go
      export PATH=$PATH:$GOROOT/bin
      export GOPATH=$HOME/goproject
      

      重新登录一下再验证golang环境是否安装成功

      go env
      GOARCH="amd64"
      GOBIN=""
      GOCACHE="/home/gong/.cache/go-build"
      GOEXE=""
      GOFLAGS=""
      GOHOSTARCH="amd64"
      GOHOSTOS="linux"
      GOOS="linux"
      GOPATH="/home/gong/goproject"
      GOPROXY=""
      GORACE=""
      GOROOT="/opt/go"
      GOTMPDIR=""
      GOTOOLDIR="/opt/go/pkg/tool/linux_amd64"
      GCCGO="gccgo"
      CC="gcc"
      CXX="g++"
      CGO_ENABLED="1"
      GOMOD=""
      CGO_CFLAGS="-g -O2"
      CGO_CPPFLAGS=""
      CGO_CXXFLAGS="-g -O2"
      CGO_FFLAGS="-g -O2"
      CGO_LDFLAGS="-g -O2"
      PKG_CONFIG="pkg-config"
      GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build199119735=/tmp/go-build -gno-record-gcc-switches"
      

2.2 GOPATH 简单说明

  1. GOPATH设置的工作空间,简单的说工作空间是一个对应特定工程的目录,它通常包含src目录,pkg目录,和bin目录
  2. src目录:用于以代码包的形式组织并保存Go源码文件
  3. pkg目录:用于存放经由go install命令构建安装后的代码包
  4. bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。

2.3 go语言标准命令概述

        bug         start a bug report
        build       compile packages and dependencies
        clean       remove object files and cached files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         update packages to use new APIs
        fmt         gofmt (reformat) package sources
        generate    generate Go files by processing source
        get         download and install packages and dependencies
        install     compile and install packages and dependencies
        list        list packages or modules
        mod         module maintenance
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         report likely mistakes in packages

2.4 第一个go语言程序

  1. GOPATH 指向目录的src目录下新建一个文件,文件名HelloWorld.go ,文件内容如下
package main

// 导入fmt包
import "fmt"

func main() {
    fmt.Println("hello world")
}

  1. 代码片段分析

    1. go语言编写的包含代码的文件的后缀是 .go

    2. package main 每个go源代码文件的开头都是package声明的, 指明该文件属于哪个包,go语言的代码是使用包来组织的,包类似于其他编程语言中的库和模块,一个包由一个或者多个.go的源文件组成,放在一个文件夹中,文件夹的名称一般描述了包的作用

    3. import "fmt" 引入一个叫做"fmt"的包,引入该包之后,可以使用fmt包中的函数,例如:fmt.Println()

    4. func main(){

      } func是一个关键字,表示函数 main是函数名,main函数在go语言中有特殊的作用,main函数表示主函数,也就是整个程序的入口函数

    5. 要生成Go可执行程序,必须建立一个名字为main的包,并且在该包中包含一个叫main()的函数(该函数是Go可执行程序的执行起点

    6. go语言中的main()函数, 不能传递参数,也不能定义返回值

    7. go语言程序中的注释有两种 一种是 :/ 块注释 / 另一种是 // 行注释

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

推荐阅读更多精彩内容