Golang学习笔记


Go 语言学习笔记

1. 引言

Go 语言是由 Google 开发的一种静态类型、编译型的系统编程语言。它以简洁、高效和易于理解著称,并且支持并发编程。

2. 安装与环境配置

2.1 安装 Go

  • 访问 Go 官方网站 下载适合你操作系统的安装包。
  • 安装完成后,设置 GOPATHGOROOT 环境变量:
    • GOROOT 是 Go 的安装路径。
    • GOPATH 用于指定 Go 工作空间的位置,默认情况下可以忽略,使用 Go 1.8 之后的版本管理机制 go modules

2.2 验证安装

  • 打开终端或命令行工具,运行以下命令来检查 Go 版本:

    sh 复制代码
    go version

3. 基础语法

3.1 变量声明

  • 使用 var 关键字声明变量:

    go 复制代码
    var x int = 10
  • 使用简短声明 :=

    go 复制代码
    y := "Hello, World!"

3.2 函数定义

  • 函数使用 func 关键字定义:

    go 复制代码
    func add(a int, b int) int {
        return a + b
    }

3.3 控制流语句

  • if 语句:

    go 复制代码
    if x > 0 {
        fmt.Println("Positive")
    } else {
        fmt.Println("Negative or Zero")
    }
  • for 循环:

    go 复制代码
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }

4. 核心特性

4.1 并发编程

  • 使用 goroutines 实现轻量级线程:

    go 复制代码
    go func() {
        fmt.Println("Hello from goroutine")
    }()
  • 使用 channels 进行 goroutine 之间的通信:

    go 复制代码
    ch := make(chan string)
    go func() {
        ch <- "Hello from channel"
    }()
    fmt.Println(<-ch)

4.2 接口

  • 接口定义行为:

    go 复制代码
    type Speaker interface {
        Speak() string
    }
  • 实现接口:

    go 复制代码
    type Dog struct{}
    func (d Dog) Speak() string {
        return "Woof!"
    }

5. 工具与实践

5.1 包管理

  • 使用 go mod 初始化模块:

    sh 复制代码
    go mod init example.com/myproject
  • 添加依赖:

    sh 复制代码
    go get github.com/some/package

5.2 测试

  • 编写测试文件(如 mypackage_test.go):

    go 复制代码
    package mypackage_test
    
    import (
        "testing"
        "example.com/mypackage"
    )
    
    func TestAdd(t *testing.T) {
        result := mypackage.Add(2, 3)
        if result != 5 {
            t.Errorf("Expected 5, got %d", result)
        }
    }
  • 运行测试:

    sh 复制代码
    go test

5.3 性能分析

  • 使用 pprof 分析性能瓶颈:

    sh 复制代码
    go tool pprof http://localhost:6060/debug/pprof/profile

6. 结论

Go 语言提供了一种简单而强大的方式来构建高性能的应用程序。

我要开始学Golang了


相关推荐
pddqjd17 分钟前
顺德区中考美术集训画室概念释义与核心服务要点梳理
学习
传奇开心果编程1 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
Rabitebla1 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西1 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
小贺儿开发1 小时前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
传奇开心果编程1 小时前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
是隼人2 小时前
buuctf-pwn ciscn_2019_sw_1(32位只有一次格式化机会)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
传奇开心果编程2 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
传奇开心果编程2 小时前
【ArkUI 练中学】第14课:应用性能优化实战
学习·ui·华为·harmonyos
PNP Robotics3 小时前
【PNP具身解读】GPT6 Astra:具身智能新范式,大模型 + Franka机器人快速落地验证一、GPT6 Astra 背后的布局、数据与具身方向
人工智能·学习·机器学习·机器人