Go 编程 | 连载 01 - Go Quickstart

简介: Go 编程 | 连载 01 - Go Quickstart

一、Go 语言

Go 语言概览

Go(Golang) 是由 Google 开源的、静态、强类型的编程语言,Go 语言最初的设计目的是用来替代 C++。

Go 语言具有以下特点:

  • 开发效率高
  • 执行性能高
  • 并发编程性能高
  • 编译速度快

Go 语言既有动态语言如Python的语法简单、开发效率高的特性,有具有静态语言如 C 的高性能。Go 语言代码可以直接编译成二进制文件,可以直接执行,不同于 Java 要先编译成 class 文件给到 JVM,再编译成二进制文件。

48219ae9df754100bc6df0bdb8e81a4b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Go 语言最火爆的项目莫过于 Docker 和 K8S,所以 Go 语言也被成为云原生时代的编程语言,除此之外,Go 还可以进行 Web 开发,基于 Go 的 http 包诞生许多优秀的 Web 框架,如 Gin、Beego、Echo 和 Iris 等。

Go 语言在微服务上应用广泛,有许多开发的基于 Go 语言的 RPC 框架,如 kit、go-micro、kratos等;Go 语言还应用于中间件,etcd、influxdb、nsq 等都是基于 Go 开发的,

Go 安装

Go 语言的安装非常简单,可以直接通过 Go 官网的 Downloads 页面下载稳定版安装包安装既可,MacOS 或者 Linux 也可以通过命令行进行安装,安装完成之后可以通过 go version 查看安装的 Go 版本信息。

91d4b528630c4582b47619c35049b000_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

二、第一个 Go 程序

Go Hello World

makedir go-file
cd go-file
vim alpha.go
复制代码

fdd3636df2d1437db559106467ddace7_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Go 程序的第一行是 package main,要在第一行声明所在的包,main 函数是 Go 程序的入口函数,类似 Java 中的 main 函数,可以将主要的逻辑放在 main 函数中。

fmt.Println 就是 Go 中 fmt 包下的打印的函数,可以将指定信息打印到控制台并换行。

运行 Go Hello World

在 Go 程序同级目录下执行 go run filename.go

61c1a812c6494849ad41ef9888eac923_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

也可以通过 go build 命令将程序编译成可执行的二进制文件

2807735232764d85a322b2c5559da34c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

image.png

执行编译后的二进制文件

603b3705877a4c688ff230c8542ce2a1_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Go IDE

Go 的 IDE 有非常多的选择,如 Vscode、Atom 以及 Goland 等,这里选择的是 Goland 2019.3。

在初始化 Go 环境配置时,在 Goland 上配置 Go SDK的最新版本(截止目前,最新版本是 1.18.4)可能会出现 ”The select directory is not a valid home for Go SDK“ 的报错,解决这个问题可以在 Go 安装目录下的 /go/src/runtime/internal/sys/zversion.go 文件中添加 Go 的版本信息

const TheVersion = `go1.18.4`
复制代码

package sys 这行下面添加版本信息,不要在顶行添加,否则执行 Go 代码时会出错。可以通过 go env 来查看 Go 安装目录以及环境配置信息。

创建项目的两种方式

第一种方式是创建文件夹 go-basic, 进入文件夹执行 init 命令

// 在 go 项目目录中执行
go mod init go-basic
复制代码

命令执行完会多出一个 go.mod 文件,该文件为 go 程序的依赖文件,类似 Maven 项目的 pom.xml 文件。

Go mod 是 Go 1.11 提出的开发包管理工具,在此之前go发布过许多包管理方案,但都强依赖于环境变量GOPATH,存在诸多缺点,不易于项目管理。

当项目包含较多依赖时,在运行前推荐使用 go mod tidy 整理项目依赖,否则运行时可能会出现 missing ... package 缺少包之类的报错。

第二种方式是使用 Goland 创建项目,选择 Go Modules

image.png

IDE 会自动创建 go.mod 文件,不需要手动执行 init 命令。

println 和 fmt.Println

fmt.Println() 和 println() 两个函数都可以将指定信息输出到控制台

package main
import "fmt"
func main() {
   println("println() 函数输出的信息:Hello, Go")
   fmt.Println("fmt.Println() 函数输出的信息:Hello, Go")
}
复制代码

执行上述代码,输出结果如下:

image.png

很明显 println() 函数输出的信息是红色的,根据其他语言的使用经验红色的信息一般都是 ERROR 信息。

查看 println() 和 fmt.Println() 的源码,选中这两个函数,按住 COMMAND 并使用鼠标点击就可以查看源码

image.png

根据官方的注释可以明确 println() 是内置函数,结果写入标准错误且没有返回值;而 fmt.Println() 函数是 fmt 包下的函数,用于将结果写入标准输出,且有两个返回值。

It returns the number of bytes written and any write error encountered.

返回的两个值分别是:

  • 写入的 bytes 数量,这里的 byte 的得是 byte 类型,表示 ASCII 码的一个字符,bytes 数量既字符串转换成字符数组的长度。
  • 写入时遇到的错误,如果没有写入错误则输出空对象 nil
func main() {
   var a = "Go"
   println(a)
   res, err := fmt.Println(a)
   fmt.Println(res, err)
   // 获取字符串的字节数组长度,这里要算上换行符。
   var bytes_list = []byte("Go\n")
   fmt.Println("'Go\n'字符串转换为字节数组的长度为:", len(bytes_list))
}
复制代码

执行上述代码,输出结果如下:

Go
Go
3 <nil>
'Go\n'字符串转换为字节数组的长度为: 3
复制代码

当然 fmt 标准包中也包含了多个输出函数,常用的有:

  • fmt.Print 函数:标准输出,不换行,输出多个非字符串类型变量时会添加空格
  • fmt.Println 函数:标准输出,换行,多个变量值之间会添加空格
  • fmt.Printf 函数:格式化输出,不换行

格式化输出常用的占位符有:

占位符 占位符说明
%v 以默认的方式打印变量的值,Go 会自动识别变量类型
%T 打印变量的类型
%+v 在打印结构体时,会添加字段名
%#v 在打印结构体时,会添加字段名和包名
%s 正常输出字符串
%q 字符串带双引号,字符串中的引号带转义符
%t 打印true或false


相关文章
|
11天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
30 7
|
17天前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
25天前
|
Java 大数据 Go
Go语言:高效并发的编程新星
【10月更文挑战第21】Go语言:高效并发的编程新星
47 7
|
1月前
|
Go 数据处理 调度
Go语言中的并发模型:解锁高效并行编程的秘诀
本文将探讨Go语言中独特的并发模型及其在现代软件开发中的应用。通过深入分析 Goroutines 和 Channels,我们将揭示这一模型如何简化并行编程,提升应用性能,并改变开发者处理并发任务的方式。不同于传统多线程编程,Go的并发方法以其简洁性和高效性脱颖而出,为开发者提供了一种全新的编程范式。
|
1月前
|
并行计算 算法 搜索推荐
探索Go语言的高并发编程与性能优化
【10月更文挑战第10天】探索Go语言的高并发编程与性能优化
|
2月前
|
存储 缓存 Go
go语言编程系列(五)
go语言编程系列(五)
|
2月前
|
搜索推荐 Java 编译器
go语言编程系列(四)
go语言编程系列(四)
|
2月前
|
存储 JSON 安全
go语言编程系列(七)
go语言编程系列(七)
|
2月前
|
存储 安全 编译器
go语言编程系列(六)
go语言编程系列(六)
|
2月前
|
自然语言处理 Java 测试技术
go语言编程系列(二)
go语言编程系列(二)