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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 《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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
18天前
|
SQL 安全 Go
【Go语言专栏】Go语言中的安全审计与漏洞修复
【4月更文挑战第30天】本文介绍了Go语言中的安全审计和漏洞修复实践。安全审计包括代码审查、静态分析、运行时分析、渗透测试和专业服务,借助工具如`go vet`、`staticcheck`、`gosec`等。修复漏洞的方法涉及防止SQL注入、XSS攻击、CSRF、不安全反序列化等。遵循最小权限原则、输入验证等最佳实践,结合持续学习,可提升Go应用安全性。参考[Go安全工作组](https://github.com/golang/security)和[OWASP Top 10](https://owasp.org/www-project-top-ten/)深入学习。
|
18天前
|
关系型数据库 Go 数据库
【Go语言专栏】Go语言中的数据库迁移与版本控制
【4月更文挑战第30天】本文介绍了Go语言中的数据库迁移和版本控制。针对数据库迁移,文章提到了使用Flyway和Liquibase两个工具。通过示例展示了如何在Go中集成这两个工具进行数据库结构的修改,以适应业务变化。而对于版本控制,文章以Git为例,说明了如何利用Git进行源代码和配置文件的管理,确保代码一致性与可追溯性。
|
18天前
|
SQL Go 数据库
【Go语言专栏】Go语言中的事务处理与并发控制
【4月更文挑战第30天】Go语言在数据库编程中支持事务处理和并发控制,确保ACID属性和多用户环境下的数据完整性。`database/sql`包提供事务管理,如示例所示,通过`Begin()`、`Commit()`和`Rollback()`执行和控制事务。并发控制利用Mutex、WaitGroup和Channel防止数据冲突。结合事务与并发控制,开发者可处理复杂场景,实现高效、可靠的数据库应用。
|
18天前
|
Go API 数据库
【Go 语言专栏】Go 语言中的 ORM 框架使用与比较
【4月更文挑战第30天】本文对比分析了Go语言中的常见ORM框架:GORM、XORM和BeeORM。GORM功能强大,支持复杂查询和关联关系处理,但可能影响性能;XORM以其简单易用和高性能受到青睐,但文档不全;BeeORM简洁高效,适合基础应用场景。选择ORM应考虑功能、性能、易用性和社区支持,根据项目需求进行评估和选择,以提升开发效率和应用性能。
|
16天前
|
IDE Go 开发工具
【GO基础】2. IDEA配置Go语言开发环境
【GO基础】2. IDEA配置Go语言开发环境
|
16天前
|
Ubuntu Unix Linux
【GO基础】1. Go语言环境搭建
【GO基础】1. Go语言环境搭建
|
18天前
|
Go 开发者
Golang深入浅出之-Go语言项目构建工具:Makefile与go build
【4月更文挑战第27天】本文探讨了Go语言项目的构建方法,包括`go build`基本命令行工具和更灵活的`Makefile`自动化脚本。`go build`适合简单项目,能直接编译Go源码,但依赖管理可能混乱。通过设置`GOOS`和`GOARCH`可进行跨平台编译。`Makefile`适用于复杂构建流程,能定义多步骤任务,但编写较复杂。在选择构建方式时,应根据项目需求权衡,从`go build`起步,逐渐过渡到Makefile以实现更高效自动化。
29 2
|
18天前
|
存储 Go
Golang深入浅出之-Go语言依赖管理:GOPATH与Go Modules
【4月更文挑战第27天】Go语言依赖管理从`GOPATH`进化到Go Modules。`GOPATH`时代,项目结构混乱,可通过设置多个工作空间管理。Go Modules自Go 1.11起提供更现代的管理方式,通过`go.mod`文件控制依赖。常见问题包括忘记更新`go.mod`、处理本地依赖和模块私有化,可使用`go mod tidy`、`replace`语句和`go mod vendor`解决。理解并掌握Go Modules对现代Go开发至关重要。
28 2
|
18天前
|
存储 负载均衡 监控
【Go 语言专栏】构建高可靠性的 Go 语言服务架构
【4月更文挑战第30天】本文探讨了如何利用Go语言构建高可靠性的服务架构。Go语言凭借其高效、简洁和并发性能,在构建服务架构中备受青睐。关键要素包括负载均衡、容错机制、监控预警、数据存储和服务治理。文章详细阐述了实现这些要素的具体步骤,通过实际案例分析和应对挑战的策略,强调了Go语言在构建稳定服务中的作用,旨在为开发者提供指导。
|
18天前
|
测试技术 Go 开发工具
【Go语言专栏】Go语言中的代码审查与最佳实践
【4月更文挑战第30天】Go语言因其简洁、高性能及并发能力,在云计算等领域广泛应用。代码审查对提升Go代码质量、遵循规范及团队协作至关重要。审查流程包括提交、审查、反馈、修改和合并代码。工具如GoLand、Git、ReviewBoard和GitHub提供支持。最佳实践包括遵循命名规范、添加注释、保持代码结构清晰、复用代码和确保测试覆盖。积极参与代码审查是提高质量的关键。