当前位置: 首页 > news >正文

【自学笔记】Go语言基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

        • 1. Go 语言简介
        • 2. 基本语法
          • 变量声明与赋值
          • 常量
          • 数据类型
          • 运算符
        • 3. 控制结构
          • 条件语句
          • 循环语句
        • 4. 函数
          • 函数定义与调用
          • 多返回值
          • 匿名函数与闭包
        • 5. 并发编程
          • goroutine
          • channel
        • 6. 错误处理
        • 7. 标准库介绍
        • 8. 代码示例
  • 总结


1. Go 语言简介

Go(又称 Golang)是一种编译型、静态类型、并发型,并具有垃圾回收功能的编程语言。由 Google 开发,于 2009 年正式发布。

2. 基本语法
变量声明与赋值
// 使用 var 关键字声明变量
var a int
var b, c string = "hello", "world"

// 简短变量声明(只能在函数内部使用)
d := 10
常量
const Pi = 3.14
const AppName = "MyGoApp"
数据类型

Go 语言是强类型语言,支持多种数据类型,包括布尔型、整型、浮点型、复数、字符串等。

运算符
// 算术运算符
a := 5 + 3
b := 10 - 4
c := 3 * 7
d := 20 / 4
e := 7 % 3

// 关系运算符
f := 10 > 5
g := 10 <= 5

// 逻辑运算符
h := true && false
i := true || false
3. 控制结构
条件语句
if x > 10 {
    fmt.Println("x is greater than 10")
} else if x == 10 {
    fmt.Println("x is equal to 10")
} else {
    fmt.Println("x is less than 10")
}
循环语句
// for 循环
for i := 0; i < 10; i++ {
    fmt.Println(i)
}

// while 循环的等价形式(通过省略初始化和后置语句实现)
i := 0
for i < 10 {
    fmt.Println(i)
    i++
}

// 无限循环
for {
    // do something
    break // 需要某种条件来跳出循环
}
4. 函数
函数定义与调用
// 定义函数
func add(a int, b int) int {
    return a + b
}

// 调用函数
result := add(5, 3)
fmt.Println(result) // 输出 8
多返回值
func swap(x, y string) (string, string) {
    return y, x
}

a, b := swap("hello", "world")
fmt.Println(a, b) // 输出 world hello
匿名函数与闭包
// 匿名函数
func(a, b int) int {
    return a * b
}(3, 4) // 直接调用并返回 12

// 闭包
addOne := func(x int) int {
    return x + 1
}
fmt.Println(addOne(5)) // 输出 6
5. 并发编程
goroutine
go func() {
    fmt.Println("This runs in a goroutine")
}()

// 主 goroutine 等待一段时间,以确保 goroutine 执行完毕(仅作为示例,实际应使用 sync.WaitGroup 等机制)
time.Sleep(1 * time.Second)
channel
ch := make(chan int)

go func() {
    ch <- 42
}()

value := <-ch
fmt.Println(value) // 输出 42
6. 错误处理
func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}
7. 标准库介绍
  • fmt:格式化 I/O 函数。
  • os:提供了与操作系统交互的功能。
  • net/http:实现了 HTTP 客户端和服务器的功能。
8. 代码示例

以下是一个完整的 Go 程序示例,它演示了上述多个知识点:

package main

import (
    "errors"
    "fmt"
    "time"
)

func main() {
    // 变量声明与赋值
    var a int = 10
    b := "Hello, Go!"
    fmt.Println(a, b)

    // 条件语句
    if a > 5 {
        fmt.Println("a is greater than 5")
    }

    // 循环语句
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }

    // 函数调用
    sum := add(5, 3)
    fmt.Println("Sum:", sum)

    // 并发编程
    go func() {
        fmt.Println("This runs in a goroutine")
    }()
    time.Sleep(1 * time.Second) // 等待 goroutine 完成

    // 错误处理
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", result)
    }

    // 使用 net/http 创建一个简单的 HTTP 服务器
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Hello, World!")
    })
    http.ListenAndServe(":8080", nil)
}

// 函数定义
func add(a int, b int) int {
    return a + b
}

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

请注意,由于示例中包含了 HTTP 服务器的创建,你需要确保在运行此代码之前已经导入了 "net/http" 包,并且由于 main 函数中的 HTTP 服务器会阻塞,因此 goroutine 的示例可能需要被移至其他函数或进行适当的调整以避免死锁。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,自学记录Go语言基础知识点总览。

http://www.dtcms.com/a/98551.html

相关文章:

  • Sentinel 相关知识点
  • 【第34节】windows原理:PE文件的导出表和导入表
  • Linux 文件系统全解析
  • 202518 | Ngnix
  • MAUI开发Device.BeginInvokeOnMainThread使用
  • python专题1-----判断一个变量是否是字符串类型
  • 代码随想录算法训练营--打卡day4
  • windows第二十章 单文档应用程序
  • 基于大语言模型的智能音乐创作系统——从推荐到生成
  • Jenkins教程(自动化部署)
  • 纯个人整理,蓝桥杯使用的算法模板day1(dfs、bfs)
  • Axure疑难杂症:完美解决中继器筛选问题(时间条件筛选、任性筛选)
  • 信号与系统(郑君里)第一章-绪论 1-22 课后习题解答
  • jdk 支持路线图
  • gamma函数与zeta函数的关系
  • 【大数据技术】大数据技术概念及概述
  • QT音乐播放器(1):数据库保存歌曲
  • Vue Kubernetes项目 局部布局面包屑 el-breadcrumb
  • Matlab教程004:Matlab矩阵的拼接重构重排以及矩阵的运算
  • 测试测试 测试
  • Kubernetes》k8s》Containerd 、ctr 、cri、crictl
  • 每日一题 MySQL基础知识----(四)
  • Java 大视界 -- Java 大数据机器学习模型在电商商品推荐冷启动问题中的解决策略(160)
  • [Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型
  • 赛博威智慧导购平台,融合AI激活一线导购效能,破局增长瓶颈
  • 目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
  • JAVA学习*工厂模式
  • Python容器详解:从字符串到字典的完整指南
  • CPT204 Advanced Obejct-Oriented Programming 高级面向对象编程 Pt.4 泛型
  • 4.训练篇2-毕设篇