01 go语言(golang) - 入门

简介

Go(又称为Golang)是由Google开发的一种静态类型、编译型、并发导向的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson在2007年设计,并于2009年正式对外发布。

官网介绍:

Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It's a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language.

Go 是一种富有表现力、简洁、清晰且高效的编程语言。它的并发机制使得编写能够充分利用多核和网络化机器的程序变得容易,而其新颖的类型系统则使得程序构建变得灵活且模块化。Go 能够快速编译成机器代码,同时拥有垃圾回收的便利和运行时反射的强大能力。它是一种快速的、静态类型的、编译型语言,给人的感觉却像是一种动态类型的、解释型的语言。

官方的指南

https://go.dev/doc/effective_go

从官网的指南可以了解接下来的大概学习路线,以下是通过kimi总结翻译的几个点:

  1. 介绍

    • Go是一种新语言,具有独特的属性,使得有效的Go程序与其他语言的程序在风格上有所不同。
    • 要编写高质量的Go代码,需要理解Go的特性和惯用法。
    • 了解Go的编程约定,如命名、格式化和程序结构,有助于编写易于理解的代码。
  2. 示例

    • Go的标准库不仅作为核心库,也提供了如何使用Go语言的示例。
    • 许多包中包含可执行的示例,可以直接在go.dev网站上运行。
  3. 格式化

    • Go使用gofmt工具自动处理大多数格式化问题,减少了风格指南的复杂性。
    • gofmt读取Go程序并输出具有标准缩进和垂直对齐的源代码,保留并重新格式化注释。
  4. 命名

    • Go中的命名很重要,命名约定,如包名通常使用小写单词。
    • 命名约定有助于代码的可读性和一致性。
  5. 控制结构

    • Go的控制结构(如ifforswitch)与C语言类似,但有其独特之处,如for循环的通用性、switch的灵活性等。
  6. 函数

    • Go支持多返回值,允许函数返回多个值。
    • 可以给返回值命名,简化代码。
  7. 数据

    • Go使用newmake进行内存分配,new分配零值,make初始化。
    • Go的数组和切片,切片提供了更通用的数组视图。
  8. 并发

    • Go鼓励通过通信共享内存,而不是通过共享内存通信。
    • Goroutine是轻量级的并发执行函数。
    • 通道(channels)用于goroutine之间的通信。
  9. 错误处理

    • Go使用多值返回,允许函数返回错误信息。
    • panicrecover用于处理程序中的异常情况。
  10. Web服务器示例

    • 提供了一个简单的Web服务器示例,展示了如何使用Go创建Web服务器。

《Effective Go》强调了编写符合Go语言习惯的代码的重要性,并通过示例和建议帮助开发者更好地理解和使用Go语言的特性。这个文档是Go开发者的宝贵资源,但需要注意的是,由于Go语言的生态系统在不断变化,文档中的内容可能不会及时更新,因此读者需要结合最新的Go语言实践。

与其他编程语言的主要异同点

每种语言都有核心特征及其设计目标,Java 和 Scala 运行在 JVM 上但 Scala 提供了更丰富的函数式编程支持;Golang 的设计重点是简洁和高效,并提供了原生支持协程;Python 是动态类型且以其易学易用著称。每种语言都有其独特优势和适用场景。

特性/语言 Java Scala Golang Python
设计哲学 面向对象的强类型语言 面向对象和函数式编程的结合 简洁性和高效性 可读性和简洁性
类型系统 静态类型 静态类型 静态类型 动态类型
执行方式 编译成字节码,运行在虚拟机上 编译成字节码,运行在JVM上 编译成机器代码 解释执行或编译为字节码
并发模型 多线程 基于Actor模型的并发 基于协程(goroutine) 多线程、多进程
主要用途 企业级应用、Android开发 Web应用、大数据处理 系统/网络编程、微服务 Web开发、科学计算等

面向对象?

Go语言并不是传统意义上的面向对象编程语言,它没有类(class)和继承(inheritance)这些典型的面向对象特性。然而,Go支持一些面向对象的概念,但以一种不同于传统方式的形式实现。

Go中的面向对象特性:

  1. 结构体(Structs)

    • 在Go中,结构体是用来定义和创建数据结构的主要方式。可以将其视为类似于其他语言中类(class)的概念。
    • 结构体可以包含数据成员(属性)和方法。
  2. 方法(Methods)

    • Go允许在结构体类型上定义方法。这使得你可以对结构体实例执行操作。
    • 方法是与特定类型关联的函数。
  3. 接口(Interfaces)

    • 接口在Go中非常重要,并且与其他语言相比有所不同。接口提供了一种方式来指定一个对象应该具有哪些方法。
    • 类型如果实现了接口所有方法,则被视为实现了该接口。这是通过隐式实现完成的,无需显式声明。
  4. 组合而非继承

    • Go没有提供传统意义上的类继承机制,而是通过嵌入一个或多个已存在类型到新类型中来复用代码,这通常称作组合。
    • 通过内嵌其他结构体到一个新结构体中来"继承"字段和方法。

面向对象设计原则

虽然Go不支持传统意义上完整范围内的面向对象编程技术如多态、封装、继承等,在设计软件时仍可应用许多OOP原则如单一职责原则、开闭原则等。使用接口和组合提供了灵活性,并鼓励更加模块化和可测试代码设计。

因此,尽管Go支持某些面向对象编程概念如封装、组合和多态性(通过接口),但它并不完全符合传统意义上严格定义下属于"面向对象"的范畴。Go采取简洁直观且高效率优先考虑地策略,在保证功能强大同时避免过度复杂化。

相关推荐
ifanatic2 分钟前
[面试]-golang基础面试题总结
面试·职场和发展·golang
懒是一种态度10 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
I_Am_Me_15 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子25 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
Ai 编码助手27 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z31 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹38 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE40 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
入 梦皆星河42 分钟前
在 Ubuntu/Debian 上安装 Go
ubuntu·golang·debian
zwjapple1 小时前
typescript里面正则的使用
开发语言·javascript·正则表达式