惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
J
Java Code Geeks
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
L
LangChain Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
Martin Fowler
Martin Fowler
月光博客
月光博客
Y
Y Combinator Blog
U
Unit 42
D
Docker
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
Go 语言入门
微信公众号 · 2018-01-07 · via 陈少文的网站

Please enable Javascript to view the contents

1. 背景

最近十多年来,C/C++ 在计算领域没有很好得到发展,没有跟上计算机发展的脚步。

现有的编程语言,开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译;要么执行效率低,但拥有高效的编译;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go 语言就横空出世了。

Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合起来。

另外一个目标是对于网络通信、并发和并行编程的支持,从而更好地利用大量的分布式和多核的计算机。

2. Go 语言简介

Go 语言是一个 Google 公司推出的一个开源项目,是一个系统开发语言。

Go 语言最初的设计由 Robert Griesemer,Rob Pike 和 Ken Thompson 在2007年9月开始的,官方的发布是在 2009 年 11 月。2010 年 5 月由 Rob Pike 公开的将其运用于 Google 内部的一个后台系统。

Go 可以运行在 Linux、Mac OS X、FreeBSD、OpenBSD、Plan 9 和 Windows 系统上,同时也支持多种处理器架构:I386、AMD64 和 ARM。

由于Go 语言针对多 CPU 系统进行了优化,使用 GO 编写的程序执行效率可以与 C 媲美,同时更加安全,支持并行。

3. 优势

  • 部署简单
    Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖
  • 并发行好
    Goroutine 和 Channel 使得编写高并发的服务端软件十分容易。很多情况下,完全不需要考虑锁机制。Go 语言的并发不是以库的形式提供,而是语言层面加入了对并发的支持。
  • 程序员友好
    与 C/C++ 相比,Go 不支持一些高级语法,代码更简明,同时拥有一些动态语言的特性
  • 执行性能好
    执行效率高,虽不如 C/C++, 但比 Python 高很多,同时内存使用也很高效。

4. Go 语言基本概念与语法

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

  • 包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。在源文件的第一行指明该文件属于哪一个包,如:package main,表示一个可独立执行的程序。
  • 常量
    常量使用关键字 const 定义,用于存储不会改变的数据。常量的定义格式:const identifier [type] = value。
  • 变量
    声明变量的一般形式是使用 var 关键字:var identifier type。
  • 数据类型
    18个基本类型,bool、string、rune、byte、int、uint、int8、uint8、int16、uint16、int32、uint32、int64、uint64、float32、float64、complex64、complex128,7个复合类型:array、struct、function、interface、slice、map、channel
  • 控制结构
    Go 提供 if-else 结构、switch 结构、select 结构、for (range) 结构
  • 函数定义

5. 内置标准库

  • fmt
    fmt 包实现了格式化的 I/O 函数,类似C语言中的 printf 和 scanf,但是更加简单。
  • strings
    strings 包实现了用于操作字符串的简单函数,包括 strings 导出函数和 Reader, Replacer 两个结构体。
  • time
    time 包提供显示和计算时间用的函数。
  • os
    os 包提供了不依赖平台的操作系统函数接口。错误处理设计为Go 风格,失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。
  • path
    path 实现了对斜杠分隔的路径进行操作的函数。
  • io
    io 包提供了对 I/O 原语的基本接口,这些接口抽象出了泛用的函数并附加了一些操作。因为这些接口是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发安全的。
  • log
    log 包实现了简单的日志服务,log 包定义了 Logger 类型,该类型提供了一些格式化输出的方法。也提供了一个预定义的标准 Logger,可以通过辅助函数 Print[f|ln]、Fatal[f|ln] 和Panic[f|ln] 访问,比手工创建一个 Logger 对象更容易使用。Logger 会打印每条日志信息的日期、时间,默认输出到标准错误。Fatal 系列函数会在写入日志信息后调用os.Exit(1)。Panic 系列函数会在写入日志信息后调用 panic。

6. Hello World

6.1 环境配置

IDE推荐: JetBrains Gogland ,也可以任意编辑器配合 Go 插件,如:Atom + go-plus

以 CentOS 下安装为例:

查看 Go 环境配置

GOARCH="amd64"
GOOS="linux"
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-    map=/tmp/go-build157488013=/tmp/go-build -gno-record-gcc-switches"
CGO_LDFLAGS="-g -O2"

6.2 Hello

hello.go 文件

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
    fmt.Printf("Hello, world.\n")
}

运行代码

1
2
$go run hello.go
Hello, world.

7. 参考


微信公众号