• go [第一篇]初识


    【第一篇】

    简介

    Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

    Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

    特点

    • 简洁、快速、安全
    • 并行、有趣、开源
    • 内存管理、数组安全、编译迅速

    应用

    • 服务器编程, 如处理日志、数据打包、虚拟机处理、文件系统等
    • 分布式系统 (数据库代理、中间件)
    • 网络编程 (web应用、api应用)
    • 云平台 例如 docker、k8s都是go语言开发的

    环境搭建及IDE安装使用

    Go 语言支持以下系统:

    • Linux
    • FreeBSD
    • Mac OS X(也称为 Darwin)
    • Window

    安装包下载地址为:https://golang.org/dl/

    如果打不开可以使用这个地址:https://golang.google.cn/dl/

    各个系统对应的包名:

    操作系统包名
    Windows go1.4.windows-amd64.msi
    Linux go1.4.linux-amd64.tar.gz
    Mac go1.4.darwin-amd64-osx10.8.pkg
    FreeBSD go1.4.freebsd-amd64.tar.gz

    设置环境变量:

    1. export GOROOT=$PATH:/path/to/go/
    2. export PATH=$PATH:$GOROOT/bin/
    3. export GOPATH=/home/user/project/go

    终端测试:

    1. go version
    2. go env
    3. Gofmt -w *.go

    HelloWorld

    创建工作目录 GoProject

    文件名: helloWorld.go,代码如下:

    复制代码
    package main
    
    import "fmt"
    
    func main() {
       fmt.Println("Hello, World!")
    }
    复制代码

    标准命令

    go build

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

    go build -o bin/tongbupan go_dev/tongbupan/main
      -o :指定编译后存放目录以及名称

    go install

    go install用于编译并安装指定的代码包及它们的依赖包。

    go get

    go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。

    go clean

    go clean命令会删除掉执行其它命令时产生的一些文件和目录

    go doc & godoc

    go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。

    godoc是一个很强大的工具,同样用于展示指定代码包的文档。

    go run

    go run命令可以编译并运行命令源码文件。

    go run src/go_dev/hello.go
    标记名称标记描述
    -a 强行对所有涉及到的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。
    -n 打印编译期间所用到的其它命令,但是并不真正执行它们。
    -p n 指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在darwin/arm平台(即iPhone和iPad所用的平台)下,该数量默认是1
    -race 开启竞态条件的检测。不过此标记目前仅在linux/amd64freebsd/amd64darwin/amd64windows/amd64平台下受到支持。
    -v 打印出那些被编译的代码包的名字。
    -work 打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。
    -x 打印编译期间所用到的其它命令。注意它与-n标记的区别。

    go test

    go test命令用于对Go语言编写的程序进行测试。这种测试是以代码包为单位的。

    go list

    go list命令的作用是列出指定的代码包的信息。

    go fix与go tool fix

    go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。

    命令go fix其实是命令go tool fix的简单封装。

    go vet与go tool vet

    go vet是一个用于检查Go语言源码中静态错误的简单工具。

    go vet命令是go tool vet命令的简单封装。

    go tool pprof

    go tool pprof命令来交互式的访问概要文件的内容。

    go tool cgo

    可以使我们创建能够调用C语言代码的Go语言源码文件。

    go env

    go env用于打印Go语言的环境信息。

    名称说明
    CGO_ENABLED 指明cgo工具是否可用的标识。
    GOARCH 程序构建环境的目标计算架构。
    GOBIN 存放可执行文件的目录的绝对路径。
    GOCHAR 程序构建环境的目标计算架构的单字符标识。
    GOEXE 可执行文件的后缀。
    GOHOSTARCH 程序运行环境的目标计算架构。
    GOOS 程序构建环境的目标操作系统。
    GOHOSTOS 程序运行环境的目标操作系统。
    GOPATH 工作区目录的绝对路径。
    GORACE 用于数据竞争检测的相关选项。
    GOROOT Go语言的安装目录的绝对路径。
    GOTOOLDIR Go工具目录的绝对路径。

    关键字

    下面列举了 Go 代码中会使用到的 25 个关键字或保留字:

    break default func interface select
    case defer go map struct
    chan else goto package switch
    const fallthrough if range type
    continue for import return var

    除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符:

    append bool byte cap close complex complex64 complex128 uint16
    copy false float32 float64 imag int int8 int16 uint32
    int32 int64 iota len make new nil panic uint64
    print println real recover string true uint uint8 uintptr

    程序一般由关键字、常量、变量、运算符、类型和函数组成。

    程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。

    程序中可能会使用到这些标点符号:.、,、;、: 和 …。

    文件规范

    Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 scanner.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 scanner_test.go 。文件名不包含空格或其他特殊字符。

    一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小进行限制。

    你会发现在 Go 代码中的几乎所有东西都有一个名称或标识符。另外,Go 语言也是区分大小写的,这与 C 家族中的其它语言相同。有效的标识符必须以字母(可以使用任何 UTF-8 编码的字符或 _)开头,然后紧跟着 0 个或多个字符或 Unicode 数字,如:X56、group1、_x23、i、өԑ12。

    以下是无效的标识符:

    • 1ab(以数字开头)
    • case(Go 语言的关键字)
    • a+b(运算符是不允许的)

    _ 本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。

    在编码过程中,你可能会遇到没有名称的变量、类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代码的灵活性,这些变量被统称为匿名变量。

    ---恢复内容结束---

  • 相关阅读:
    (精华)将json数组和对象转换成List和Map(小龙哥和牛徳鹤的对话)
    优先队列底层实现是堆(heap)(操作系统进程调度)
    (透彻理解)最精锐代码::堆的三种基本操作新建-插入-删除
    (考研)读者写者问题(附代码)
    (考研)黑电吃苹果同步互斥问题(附代码)
    (考研)哲学家进餐问题(附代码)
    (考研)吸烟者问题(赋代码)
    (考研)PV操作和信号量
    01.第一章_C++ Primer学习笔记_开始
    C++学习笔记
  • 原文地址:https://www.cnblogs.com/lxx7/p/10637291.html
Copyright © 2020-2023  润新知