《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)(上)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)(上)

image.png

第1章:Go 语言基础

1.1 Go 语言的安装与环境配置

在开始 Go 语言的旅程之前,我们首先需要搭建一个舒适的环境,让 Go 能在你的机器上愉快地运行。这就像是为一场盛大的宴会做准备,确保每位嘉宾(Go 程序)都能找到它们的座位(运行环境),并享用美食(系统资源)。

1.1.1 基础知识讲解

下载 Go

首先,你需要前往 Go 语言的官方网站下载安装包。这个网站像是 Go 语言的家,你可以在这里找到最新版本的 Go。确保选择与你的操作系统相匹配的版本。如果你是 Windows 用户,就下载 Windows 版;如果你使用的是 macOS 或 Linux,相应地选择那个版本。

安装 Go

下载完成后,启动安装程序。安装 Go 语言就像是在你的计算机上安装一个游戏,跟随安装向导一步一步来,不需要做特别的配置。安装向导会将 Go 安装在默认的位置,并且配置好所有必需的环境变量。在这个过程中,你可以喝一杯咖啡,享受一下等待的时光。

配置环境变量

  • GOPATH:这是 Go 语言的工作空间,你的 Go 项目和第三方库会存放在这里。想象一下,这就像是你的工作桌,你所有的工具和文件都在这个地方。
  • GOROOT:这是 Go 语言安装的位置,大多数时候,你不需要手动设置这个变量,除非你想要将 Go 安装在一个非标准的位置。
  • PATH:为了能够在任何地方通过命令行运行 Go 程序,你需要把 Go 的 bin 目录添加到 PATH 环境变量中。这就像是在告诉你的计算机,你安装的 Go 程序在哪里,它可以去那里找到它们。

验证安装

打开终端或命令提示符,输入 go version。如果看到了 Go 的版本号,那么恭喜你,你已经成功安装了 Go 语言。这就像是通过了编程世界的入学考试,你现在准备好了接受更多的挑战。

案例 Demo:简单的 Go 程序

为了让你更好地理解如何开始使用 Go,让我们来编写一个简单的程序,这个程序会打印出“Hello, Go!”。这是每个编程语言学习者的传统,也是你的第一个里程碑。

  1. 创建文件
    在你的工作目录(GOPATH)中,创建一个新的文件夹 hello-go,然后在这个文件夹中创建一个名为 main.go 的文件。
  2. 编写代码
    使用文本编辑器打开 main.go 文件,然后输入以下代码:
package main
import "fmt"
func main() {
    fmt.Println("Hello, Go!")
}
  1. 这段代码的作用是引入 Go 语言的标准库 fmt,并在 main 函数中调用 fmt.Println 函数来在屏幕上打印出 “Hello, Go!”。
  2. 运行程序
    在命令行中,导航到 hello-go 文件夹的位置,然后输入命令 go run main.go。你的屏幕上应该会显示 “Hello, Go!” 的字样。

恭喜你,你刚刚完成了你的第一个 Go 程序!这是一个简单但重要的开始,你已经迈出了成为 Go 开发者之旅的第一步。随着你继续深入学习,你将会发现 Go 语言的强大之处,并开始构建更复杂的应用程序。

1.1.2 重点案例:搭建一个 Go Web 服务

现在,让我们深入实践,通过创建一个简单的 Go Web 服务来进一步探索 Go 语言。这个 Web 服务将监听 HTTP 请求,并返回一个欢迎消息。这不仅是一个绝佳的实践机会,也能让你体验到使用 Go 构建网络应用的简便与强大。

准备工作

在开始之前,确保你已经按照前面的指导安装了 Go,并且能够在命令行中运行 go version 命令。

步骤 1:创建项目目录

在你的 GOPATH 下,创建一个新的目录用于本项目,我们将其命名为 hello-web。这将是我们项目的根目录。

步骤 2:编写 Web 服务代码

  1. hello-web 目录中,创建一个新的文件,命名为 main.go
  2. 使用文本编辑器打开 main.go 文件,并写入以下代码:
package main
import (
    "fmt"
    "net/http"
)
func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "欢迎来到 Go Web 服务!")
    })
    fmt.Println("服务启动,监听端口 8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        fmt.Println("服务器启动失败:", err)
    }
}

这段代码做了什么?

  • 定义了一个简单的 HTTP 服务器。
  • 使用 http.HandleFunc 注册了一个处理函数,当访问根路径 / 时,将执行这个函数。
  • 在函数中,我们向响应写入了 “欢迎来到 Go Web 服务!”。
  • 最后,我们告诉 HTTP 服务器监听 8080 端口,并启动服务。

步骤 3:运行你的 Web 服务

  1. 打开命令行工具,切换到项目目录 hello-web
  2. 输入命令 go run main.go 来启动你的 Web 服务。
  3. 你应该能看到输出 “服务启动,监听端口 8080”,这表示你的 Web 服务已经在运行了。

步骤 4:测试服务

  1. 打开你的 Web 浏览器。
  2. 在地址栏中输入 http://localhost:8080,然后按 Enter 键。
  3. 你的浏览器应该显示 “欢迎来到 Go Web 服务!”。

恭喜你!你已经成功创建并运行了你的第一个 Go Web 服务。通过这个简单的例子,你不仅学会了如何使用 Go 语言来开发 Web 应用,还体验到了 Go 在网络编程方面的强大和简洁。随着你继续深入学习,你将能够开发更加复杂和功能丰富的 Web 应用。

1.1.3 拓展案例 1:使用 Go 连接数据库

在现实世界的应用中,Web 服务经常需要与数据库进行交互来存储和检索数据。Go 语言通过其标准库 database/sql 以及数据库特定的驱动程序,提供了一个简单而强大的方式来连接和操作数据库。本案例将展示如何使用 Go 连接到 PostgreSQL 数据库,并执行一个简单的查询。

准备工作

  • 确保你已经安装了 PostgreSQL 数据库,并且数据库正在运行。
  • 创建一个数据库和表用于测试。例如,我们创建一个名为 testdb 的数据库,以及一个名为 users 的表:
CREATE DATABASE testdb;
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT NOT NULL
);
  • users 表中插入一些示例数据:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
  • 安装 PostgreSQL 的 Go 驱动。在命令行中运行以下命令:
go get -u github.com/lib/pq

这将安装 pq 驱动,这是一个实现了 database/sql 接口的 PostgreSQL 驱动。

步骤 1:编写 Go 程序连接数据库

  1. 在你的项目目录中(可以复用之前的 hello-web 目录或创建一个新的),创建一个新的文件,命名为 main.go
  2. 编辑 main.go 文件,写入以下代码:
package main
import (
    "database/sql"
    "fmt"
    "log"
    _ "github.com/lib/pq"
)
const (
    host     = "localhost"
    port     = 5432 // PostgreSQL 默认端口
    user     = "你的用户名"
    password = "你的密码"
    dbname   = "testdb"
)
func main() {
    // 构建连接字符串
    psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
        "password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)
    // 连接数据库
    db, err := sql.Open("postgres", psqlInfo)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("成功连接到数据库")
    // 执行查询
    sqlStatement := `SELECT id, name, email FROM users;`
    rows, err := db.Query(sqlStatement)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    // 遍历查询结果
    for rows.Next() {
        var id int
        var name, email string
        err = rows.Scan(&id, &name, &email)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("ID: %d, Name: %s, Email: %s\n", id, name, email)
    }
    // 检查查询过程中是否有错误发生
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}

这段代码做了什么?

  • 定义了数据库连接的参数,并构建了一个连接字符串。
  • 使用 sql.Open 连接到 PostgreSQL 数据库。
  • 使用 db.Ping() 测试连接是否成功。
  • 执行了一个 SQL 查询,选择 users 表中的所有记录,并遍历这些记录。
  • 使用 rows.Scan 将每条记录的字段值赋值给相应的变量。

步骤 2:运行程序

  1. 确保你已经根据实际情况修改了数据库连接参数。
  2. 在命令行中,运行 go run main.go
  3. 如果一切顺利,你将看到成功连接到数据库的消息,以及 users 表中的记录被打印到终端。

通过这个案例,你已经学会了如何在 Go 程序中连接并操作 PostgreSQL 数据库。这是开发现代 Web 应用中一个非常重要的技能。随着你对 Go 和数据库编程的进一步学习,你将能够构建更加复杂和强大的数据驱动应用。

1.1.3 拓展案例 2:创建一个 RESTful API

在这个案例中,我们将使用 Go 语言创建一个简单的 RESTful API。这个 API 将能够处理 HTTP GET 请求,并返回一个 JSON 格式的响应。我们将构建一个用户信息服务,当请求 /users 路径时,它会返回用户列表的 JSON 数据。

准备工作

确保你已经安装了 Go,并且你的开发环境已经设置好。

步骤 1:创建项目目录

在你的 GOPATH 下,创建一个新的目录用于本项目,我们将其命名为 rest-api。这将是我们项目的根目录。

步骤 2:编写 RESTful API 代码

  1. rest-api 目录中,创建一个新的文件,命名为 main.go
  2. 使用文本编辑器打开 main.go 文件,并写入以下代码:
package main
import (
    "encoding/json"
    "net/http"
)
// User 定义了用户信息的结构体
type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
    Email string `json:"email"`
}
// users 列表模拟了一个简单的数据存储
var users = []User{
    {ID: 1, Name: "Alice", Email: "alice@example.com"},
    {ID: 2, Name: "Bob", Email: "bob@example.com"},
}
func getUsers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(users)
}
func main() {
    http.HandleFunc("/users", getUsers)
    http.ListenAndServe(":8080", nil)
}

这段代码实现了什么?

  • 定义了一个 User 结构体来存储用户信息。
  • 创建了一个全局变量 users,它是 User 结构体切片,用来模拟数据存储。
  • 实现了一个 getUsers 函数,这个函数将处理所有到 /users 路径的 HTTP GET 请求。它将用户列表转换为 JSON 格式,并写入响应。
  • main 函数中,我们使用 http.HandleFunc 注册了 getUsers 函数作为 /users 路径的处理器,然后启动了 HTTP 服务器监听 8080 端口。

步骤 3:运行你的 API

  1. 打开命令行工具,切换到项目目录 rest-api
  2. 输入命令 go run main.go 来启动你的 RESTful API。
  3. 你应该能看到服务器启动,并在 8080 端口监听请求。

步骤 4:测试 API

  1. 打开你的 Web 浏览器或使用一个 HTTP 客户端工具(如 Postman 或 curl)。
  2. http://localhost:8080/users 发送一个 GET 请求。
  3. 你的请求应该会收到一个 JSON 格式的响应,内容是用户列表的数据。

通过这个案例,你已经学会了如何使用 Go 创建一个简单的 RESTful API,它能够处理 HTTP GET 请求并返回 JSON 数据。这是构建现代 Web 应用和微服务架构的基础。随着你对 Go 的进一步学习和实践,你将能够创建更复杂的 RESTful API,支持更多的 HTTP 方法和功能。

1.2 基本语法介绍

欢迎进入 Go 语言的世界!在这一节中,我们将探索 Go 语言的基本语法元素,包括变量声明、控制流程(如条件判断和循环)以及函数的定义和使用。掌握这些基础知识是成为一名 Go 程序员的关键第一步。

1.2.1 基础知识讲解

变量声明

在 Go 中,你可以使用 var 关键字来声明一个变量。Go 也支持类型推断,所以你可以用 := 语法在声明变量的同时对其进行初始化,而不必显式指定类型。

var name string = "Alice"
age := 30 // 类型推断为 int

控制流程

  • 条件判断:Go 语言使用 ifelse 关键字进行条件判断。与其他语言不同,Go 的条件判断语句不需要用括号将条件包围起来。
if age > 18 {
    fmt.Println("You are an adult.")
} else {
    fmt.Println("You are a minor.")
}
  • 循环:Go 语言中的循环使用 for 关键字。Go 没有 while 关键字,但是你可以通过 for 实现同样的功能。
for i := 0; i < 5; i++ {
    fmt.Println("Loop", i)
}

函数

在 Go 中,你可以使用 func 关键字来定义一个函数。函数可以有参数和返回值。

func greet(name string) string {
    return "Hello, " + name
}

《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)(下)+https://developer.aliyun.com/article/1486977

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
95 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
2月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
48 7
|
2月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
4天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
51 20
|
2天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
10天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
34 14
|
2月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
124 71
|
2月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
121 67
|
24天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
28 5
|
1月前
|
算法 安全 Go
Go语言中的加密和解密是如何实现的?
Go语言通过标准库中的`crypto`包提供丰富的加密和解密功能,包括对称加密(如AES)、非对称加密(如RSA、ECDSA)及散列函数(如SHA256)。`encoding/base64`包则用于Base64编码与解码。开发者可根据需求选择合适的算法和密钥,使用这些包进行加密操作。示例代码展示了如何使用`crypto/aes`包实现对称加密。加密和解密操作涉及敏感数据处理,需格外注意安全性。
46 14

热门文章

最新文章