Go语言学习笔记1 | 豆包MarsCode AI刷题

75 阅读4分钟

Go语言基础语法笔记1

      在学习go语言时,我也会比较其与Python语言和C语言语法的区别与相似之处。总的来说,Go语言与C语言更加相似。通过比较不同语言的语法,我们可以更深入地理解每种语言的设计理念和特性。掌握多种语言并理解它们之间的区别,使你能够更轻松地在不同项目和语言之间切换。了解相似点可以加快学习新语言的速度,而了解差异点则有助于避免编程时出现潜在问题。

变量与常量

Go语言通过关键字var声明变量,使用const定义常量。变量可以显式声明类型,也可以通过:=进行类型推断。常量的值不可改变,适用于固定值的场景。

变量声明

var name string = "Go"
age := 25  // 简短声明

常量声明

const Pi = 3.14

Go是静态类型语言,变量类型在编译时确定;Python是动态类型语言,类型在运行时确定。 C语言是静态类型语言,变量需声明,类型固定。 常量使用const或#define宏定义。

数据类型

  • 基本数据类型
    • 数值类型int, float32, float64
    • 字符类型string, rune
    • 布尔类型bool (true or false)

Go的数组固定长度,切片灵活扩展,无需显式管理内存;C语言需要手动分配/释放内存。Python的列表功能更丰富。 Go的map等价于Python的字典,但Go的map类型更严格。

流程控制

流程控制语句帮助管理程序执行的顺序。 

  • 条件判断:使用if-else处理分支逻辑。 
  • 循环:通过for循环实现重复操作。 
  • 多分支选择:使用switch语句简化复杂的多条件判断。

go语言与C语言基本结构相似,但Go没有while(用for替代);而C语言提供更细致的循环控制。

函数

Go语言的函数设计简洁而灵活,支持多个返回值,有助于代码重用。函数是程序的基本构建模块,可以传参和返回结果,简化复杂操作。

func add(a int, b int) int { 
    return a + b 
}

结构体

结构体是一种自定义数据类型,用于组织相关数据。它类似于面向对象中的类,但不支持继承。通过结构体,可以将不同类型的字段组合在一起,表示更复杂的数据结构。

定义结构体

type Person struct {
    Name string
    Age  int
}

命名规则

  • 使用驼峰命名法:如studentID
  • 变量名应简洁且描述清晰:如isActiveuserName
  • 避免使用模糊名称,如tempdata

Go扩展了C的struct概念,支持方法定义;C语言仅用于数据组合。Python提供完整的面向对象特性。 

并发特性

Go语言内置并发支持,通过Goroutine实现轻量级线程。协程比传统线程更高效,结合Channel可以实现安全的并发通信,避免数据竞争。

  • Go协程(Goroutine):

    go复制代码go func() {
        fmt.Println("Hello, Goroutine!")
    }()
    
  • 通道(Channel):

    go复制代码ch := make(chan int)
    ch <- 42        // 发送数据
    value := <- ch  // 接收数据
    

Go语言使用Goroutine和Channel提供高效并发。 Python使用线程和进程,但受限于GIL(全局解释器锁)。 C语言主要通过pthread库实现多线程并发。

垃圾回收

Go语言可以自动垃圾回收,无需显式释放内存。 Python需要垃圾回收,自动管理内存。 C语言需要手动管理内存(malloc/free),更易出错。

Go语言常用特性总结

  • 简洁的语法:减少冗余代码,增强可读性。
  • 静态类型:在编译阶段进行类型检查,提高程序的可靠性。
  • 自动垃圾回收:简化内存管理,降低内存泄漏风险。
  • 高效并发模型:Goroutine和Channel提供轻量级并发支持,易于构建并行应用。
  • 跨平台支持:Go程序可以编译为不同平台的二进制文件,方便部署。

学习心得

       我们可以通过比较,可以更深入理解不同语言的设计思想,从而在不同场景选择合适的工具。在学习Go时,与Python、C等语言进行比较,有助于更全面地理解其设计理念和优势。Go虽然语法简洁,但要扎实掌握基本语法和特性,如数据类型、结构体、函数、接口等。基础打牢后,深入理解Go的高级特性,如反射、接口、并发编程等,才能更加得心应手。