Go语言

  Google开源
  编译形语言
  21世纪的C语言

Go语言的特色
  简单易并发
  开发效率高
  执行性能好

Go语言应用的领域
  服务端开发
    日志处理
    文件系统
    监控服务
  容器虚拟化
    Docker
    k8s
    Docker Swarm
  存储
    etcd
    Tidb
    Groupcache
  Web开发
    net/http
    Gin
    Echo
  区块链
    以太坊
    fabric


开发环境
  官网地址:
    https://golang.google.cn/dl/
    选择对应版本 下载 安装
  (我这里是mac 因此使用brew下载)
    brew install go

  完成后使用 go env 查看版本


配置go路径环境
  主要是GOROOT和GOPATH

  GOROOT:就是go的安装环境
  GOPATH:做为编译后二进制的存放目的地和import包时的搜索路径。其实说通俗点就是你的go项目工做目录。一般状况下GOPATH包含三个目录:bin、pkg、src。

  src目录下主要存放go的源文件

  pkg目录存放编译好的库文件,主要是*.a文件;

  bin目录主要存放可执行文件

  注意:千万不要把GOPATH设置成go的安装路径,能够本身在用户目录下建立一个目录,例如mygo

  通常安装好go以后,使用go env查看一下当前环境。此时显示出来的GOROOT就是你使用brew安装go的安装目录,这个路径要记下来。接下来要在bash_profile文件中进行配置。

 

Golang /Go调试工具delve

  Windows or Linux
    go get github.com/derekparker/delve/cmd/dlv
  Mac使用brew下载
    brew install go-delve/delve/delve

     

IDE下载 Goland
  http://www.jetbrains.com/go/

  下载后激活正常使用

 

 

Go语言的项目结构
  -GOPATH
    -src //目录下主要存放go的源文件
      -网站域名/公司级别仓库域名
        - 做者/机构
          - 项目name
            - 模块a
            - 模块b
    -bin // 目录主要存放可执行文件
    -pkg //目录存放编译好的库文件,主要是*.a文件;

  编译: 只须要编辑主文件便可 不须要编译包
    cd /Project/pkg ## 在哪里编译 编译后的文件就在那里
    go build ../src/xxxx/xxx.go

    或指定编译后存放的地址

    go build -o Project/pkg/name src/xxx/xxx.go ## -o 参数指定编译后存放的位置 最后的/name 指的是编译后生成的文件name 也能够不指定

  *** 跨系统编译
    Mac下编译Linux和Windows平台64位可执行程序须要设置
      Linux
        CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build;
      Windows
        CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build;

    Linux下编译Mac和Windows平台64位可执行程序
      Mac
        CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build;
      Windows
        CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build;
    Windows下编译Mac和Linux平台64位可执行程序
      Mac
        SET CGO_ENABLED=0 // 禁用CGO
        SET GOOS=darwin // 目标平台设定
        SET GOARCH=amd64 // 64位系统
        go build
      Linux
        SET CGO_ENABLED=0
        SET GOOS=linux
        SET GOARCH=amd64
        go build

    编译并移动至bin目录
      go install

Go代码结构

package main //导包 main可执行文件 若是更换其余的name则不会执行 会生成一个.a文件供其余程序引入调用
import(
// go全部的功能都靠包的引入
"fmt" // 输出输出模块 
)
func main(){ //主函数
  fmt.Println("hello word") // Println 输出至终端
}
 

 

运行

  IDE下
    右击Run
  终端下
    cd至建立文件路径下
      go run 文件name.go

 

Go强语言类型

  建立函数传入参数以及返回值必需要指定类型例如
    # 补充 声明的变量若是不使用会被强制删除

func add(a int, b int // 定义参数类型 ) int //定义返回值类型 { 
var sum int // 定义变量类型
sum = a + b
return sum // 返回值
}

 

语言特性

  1.垃圾回收
    a.内存自动回收,不再须要开发人员管理内存
    b.开发人员专一业务时间,下降了心智负担
    c.只须要new分配内存,不须要释放
  2.自然并发
    a.从语言层面支持并发,很是简单
    b.goroute,轻量级线程,建立成千上万个goroute成为可能
    c.基于CSP(Commuicating Sequential Process)模型实现

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

  3.channel
    a.管道,相似unix/linux中的pipe
    b.多个goroute之间经过channel进行通信
    c.支持任何类型

func main(){
    pip3:=make(chan int,3) // make开辟空间 长度为3 且只能存int类型
    pipe <- 1
    pipe <- 2
}

  4.多返回值
    a.一个函数返回多个值

func calc(a int,b int)(int,int){ //(int,int) 定义返回值
    sum:= a+ b
    avg:= (a+b)/2
    return sum,avg
}

  补充: 解包到不须要的参数 使用 "_"接受则为省略     res,_ = calc(1,3)     res = 4