Go:什么是Go

时间:July 12, 2018 分类:

目录:

什么是Go?

Go是一门并发支持,垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡的一门编程语言。

Go的特点

  • 类型安全和内存安全
  • 以非常直观和极低的代价的方案实现高并发
  • 高效的垃圾回收机制
  • 快速编译(同时解决C语言中头文件太多的问题)
  • 以多核计算机提供性能提升方案
  • UTF-8编码支持

同时解决C语言中头文件太多的问题是指在编译的时候判断引入的包是否被使用,如果没有被使用会报错,进而减少编译的二进制程序的体积。

Go存在的价值

Go本身是Google用于解决内部服务端问题而设计的,可以参考Go在谷歌: 以软件工程为目的的语言设计

目录结构

  • bin存放编译后生成的可执行文件
  • pkg存放编译后生成的包文件
  • src存放项目源码

Hello World

linux下安装golang

下载安装包

可以参考一下地址

官网下载页

下载Go

[root@why 23:59:18 opt]#wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

解压Go

[root@why 23:59:31 opt]#tar xf go1.10.3.linux-amd64.tar.gz -C /usr/local/

将 /usr/local/go/bin目录添加至PATH环境变量

[root@why 00:00:28 opt]#vi /etc/profile
export PATH=$PATH:/usr/local/go/bin
[root@why 00:01:58 opt]#. !$
. /etc/profile

常用命令

  • go get : 获取远程包(需要提前安装git或hg)
  • go run : 直接运行程序
  • go build : 测试编译,检查是否有编译错误
  • go fmt : 格式化源代码
  • go install : 编译包文件并编译整个程序
  • go test : 运行测试文件,测试的是_test.go后缀的文件
  • go doc : 查看文档

  • go install会先检测有木有引入的文件,如果有,首先在pkg目录下生成.a为后缀的包文件,然后在bin目录下生成二进制文件,如果没有就直接生成二进制文件

  • go build查性编译,如果package名称为main则会生成可执行文件
  • go run会产生临时文件,直接开始运行

go env

[root@why 00:19:00 go_code]#go env
GOARCH="amd64"  # CPU架构
GOBIN=""    # 工作bin目录
GOCACHE="/root/.cache/go-build"
GOEXE=""    # 生成执行文件的后缀名
GOHOSTARCH="amd64"  # 交叉编译架构
GOHOSTOS="linux"    # 本机系统
GOOS="linux"
GOPATH="/root/go"   # PATH工作目录
GORACE=""
GOROOT="/usr/local/go"  # 安装目录
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"  # 工具目录
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
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-build557222987=/tmp/go-build -gno-record-gcc-switches"

go doc

[root@why 00:32:41 go_code]#go doc fmt Println
func Println(a ...interface{}) (n int, err error)
    Println formats using the default formats for its operands and writes to
    standard output. Spaces are always added between operands and a newline is
    appended. It returns the number of bytes written and any write error
    encountered.

也可以启动本地http服务用于创建go文档服务器

[root@why 00:35:03 go_code]#godoc -http=:5555 &
[1] 17316
[root@why 00:35:05 go_code]#ss -nlpt | grep 5555
LISTEN     0      128         :::5555                    :::*                   users:(("godoc",pid=17316,fd=3))

Hello World

[root@why 00:13:54 go_code]#vi hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

执行以上代码输出

[root@why 00:14:15 go_code]#go run hello.go 
Hello, World!