day 1: 环境准备与第一个 Go 程序

Table of Contents

第一天:环境准备与第一个 Go 程序

学习目标

  • 搭建 Go 开发环境
  • 熟悉 go modgo rungo build
  • 编写并运行第一个 Go 程序
  • 通过 LeetCode 简单题体验 Go 语言语法
  • 思考与服务开发的关联

1. 环境搭建

安装 Go

  1. 访问 Go 官方下载页面
  2. 选择对应平台的安装包 (Windows、macOS、Linux)。
  3. 安装完成后,验证版本:

    go version

    输出类似:

    go version go1.22.2 darwin/amd64

配置工作区

推荐使用 Go Modules(Go 1.13+ 默认支持)。
检查是否启用:

go env GOMOD

如果输出为空,可以在项目目录执行:

go mod init myservice

IDE 选择

推荐使用:

  • VS Code + Go 插件
  • Goland (付费,但对 Go 支持很完善)

2. 第一个 Go 程序:Hello Service

创建一个目录:

mkdir day01-hello
cd day01-hello
go mod init day01-hello

新建 main.go

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go Service World!")
}

运行:

go run main.go

输出:

Hello, Go Service World!

构建二进制:

go build -o hello
./hello

3. 第一个 LeetCode 例子:两数之和

微服务开发需要良好的算法和数据结构基础,我们从最经典的 LeetCode #1 两数之和 开始。

题目
给定一个整数数组 nums 和一个目标值 target,找出数组中和为目标值的两个数的下标。

Go 解法

two_sum.go

package main

import "fmt"

func twoSum(nums []int, target int) []int {
    m := make(map[int]int)
    for i, num := range nums {
        if j, ok := m[target-num]; ok {
            return []int{j, i}
        }
        m[num] = i
    }
    return nil
}

func main() {
    nums := []int{2, 7, 11, 15}
    target := 9
    result := twoSum(nums, target)
    fmt.Println("输入:", nums, "目标:", target)
    fmt.Println("结果:", result)
}

运行:

go run two_sum.go

输出:

输入: [2 7 11 15] 目标: 9
结果: [0 1]

4. 与服务开发的联系

为什么从 LeetCode 开始?因为:

  • Map 使用:Go 的 map 是高性能哈希表,广泛用于缓存、索引、存储用户会话等场景。
  • 错误处理:返回 nil 是 Go 常见模式,类似于在微服务中返回错误或空结果。
  • 性能:哈希表在高并发服务中是常用的优化工具。

未来的微服务项目里,你会用 map 来管理用户任务、缓存配置、维护连接状态等。今天的例子就是一个最小化的演练。


5. 今日小结

今天我们完成了:

  1. 安装 Go 环境
  2. 编写并运行第一个 Go 程序
  3. 解决了 LeetCode 的 “两数之和” 问题
  4. 初步理解了 map 的使用及其与微服务的关系

6. 作业

  1. 修改程序,尝试不同输入,观察结果。
  2. main 中加一个错误检查逻辑:当结果为 nil 时输出提示信息。
  3. 思考:如果这是一个微服务接口,如何把结果通过 JSON 返回给客户端?

Comments |0|

Legend *) Required fields are marked
**) You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Category: 似水流年