Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析

本文涉及的产品
云原生网关 MSE Higress,422元/月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档

学习基础知识

掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档

文章链接:Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较

基本语法

了解 Go 语言的基本语法,包括 Go 程序的执行方式、包引入、主函数等

Go 中的变量

变量是赋予内存位置的名称,用于存储特定类型的值。Go 语言提供了多种声明和使用变量的方式。

文章链接:Go 语言变量类型和声明详解

数据类型

Go 是一种静态类型的编程语言,这意味着每个变量在初始时都有一个定义的类型,并且只能保存该类型的值。在 Go 中,有两类数据类型:基本类型和复合类型。

文章链接:解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

For Loop

Go 语言只有一种循环结构,即 for 循环。基本的 for 循环由三个部分组成,用分号分隔:

  1. 初始化语句:在第一次迭代之前执行
  2. 条件表达式:在每次迭代之前评估
  3. 后置语句:在每次迭代结束时执行

文章链接:Go 语言中 For 循环:语法、使用方法和实例教程

Range

Range 与 For 循环一起用于在数组、字符串和其他数据结构中迭代每个元素。

条件语句

条件语句用于仅在某个条件为真时执行代码;Go 支持:

  • if 语句
  • if / else 语句
  • switch case 语句

文章链接:深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例

Errors/Panic/Recover

为了替代添加异常处理程序,Go 的创建者利用了 Go 能够返回多个值的能力。发出错误的 Go 语言中最常用的技术是将错误作为返回的最后一个值。

Panic 通常意味着发生了意外错误。主要用于在不应该在正常操作期间发生的错误或我们无法优雅处理的错误时快速失败。

Go 中的 Panic 恢复取决于一种语言特性,称为延迟函数。Go 具有在其父函数返回时保证函数执行的能力。这会发生无论父函数返回的原因是 return 语句、函数块的结束还是 panic

Functions

了解 Go 中函数的工作原理,下面的资源列表将涵盖:

  • 如何在 Go 中定义和调用函数?
  • Go 中的命名返回值?
  • 处理多个返回类型。
  • Go 中不同类型的函数。

文章链接:Go 语言函数、参数和返回值详解

Packages

包是 Go 语言中最强大的部分。包的目的是通过将相关功能组合到单个单元中,从而设计和维护大量程序,以便它们易于维护和理解,并且独立于其他包程序。这种模块化允许它们进行共享和重用。在 Go 语言中,每个包都用不同的名称定义,并且该名称与其功能密切相关,如“strings”包,它包含与字符串相关的方法和函数。

文章链接:Go 语言基础:包、函数、语句和注释解析

Type Casting

Go 不支持自动类型转换,但允许类型转换,即显式更改变量类型。要了解更多关于类型转换的信息,请访问以下资源:

Type Inference

类型推断使 Go 能够检测值的类型,而无需明确指定类型,因此可以在首次声明变量时声明变量而不提供其类型的可能性。

Arrays

在 Go 中,数组是在创建数组时定义的具有相同类型的元素集合。

文章链接:Go 语言数组基础教程 - 数组的声明、初始化和使用方法

Slices

切片类似于数组,但更强大和灵活。像数组一样,切片也用于在单个变量中存储相同类型的多个值。但与数组不同,切片的长度可以根据需要增长和缩小。

文章链接:Go 语言中切片的使用和理解

Maps

映射是 Go 中的数据结构,我们在想要在键值对之间进行映射时使用它。它们在删除或添加元素方面具有灵活性。映射不允许重复条目,同时数据是无序的。

文章链接:Go 语言之 Maps 详解:创建、遍历、操作和注意事项

Make

Golang 的内置函数 make 帮助我们创建和初始化切片、映射和通道,具体取决于传递给函数的参数。

Structs

结构是用户定义的类型,帮助我们创建描述单个实体的数据集合

文章链接:Go 语言中结构体的使用和示例

Modules

Go 模块是一组相关的包,它们被一起进行版本控制和分发。它们指定了我们项目的要求,列出了所有所需的依赖项,并帮助我们跟踪安装的依赖项的具体版本。

Working with JSON

JSON(JavaScript 对象表示法)是一种简单的数据交换格式。在语法上,它类似于 JavaScript 的对象和列表。它最常用于 Web 后端与在浏览器中运行的 JavaScript 程序之间的通信,但它在许多其他地方也被使用。

Types and Type Assertions

Golang 中的类型断言提供了对接口变量的确切类型的访问。

Interfaces

Go 中的接口是一种定义一组方法的类型。如果我们有一个实现该方法集的类型(例如结构体),那么我们就有了实现该接口的类型。

Context

context 包提供了解决请求期间管理状态问题的标准方式。该包满足对请求范围数据的需求,并提供了处理截止日期、取消信号等的标准化方式。

Goroutines

Goroutines 允许我们在 Go 中编写并发程序。处理成千上万个请求的 Web 服务器或在同时进行网络请求的同时呈现新页面的网站都是并发的示例。在 Go 中,每个并发任务都称为 Goroutines
具和协议。它们帮助您在开发Web应用程序时绕过一些操作,而不是每次都重新发明轮子。使用API客户端是加快开发过程的好方法

REST

REST(表述性状态转移)API(应用程序编程接口)

Channels

通道是连接并发Goroutines的管道。您可以从一个Goroutine向通道发送值,然后从另一个Goroutine接收这些值。通道是一种通过通道操作符<-发送和接收值的有类型导管。

Buffer

缓冲区属于Go语言的字节包,我们可以使用这些包来操作字符串的字节。

Select

select 语句让一个Goroutine等待多个通信操作。select 语句阻塞,直到其一个case可以运行,然后执行该case。如果有多个case准备就绪,则它会随机选择一个。select 语句类似于switch语句,但在select语句中,case语句涉及通信,即在通道上发送或接收操作。

Mutex

Go允许我们使用Goroutines并发运行代码。然而,当并发进程访问相同的数据片段时,可能导致竞态条件。Mutexsync包提供的数据结构。它们可以帮助我们在数据的不同部分放置锁,以便一次只能有一个Goroutine访问它。

Building CLI Applications

与图形用户界面(GUI)不同,命令行界面(CLI)仅限于文本。云和基础架构应用程序主要基于CLI,因为它们易于自动化并具有远程功能。Go应用程序构建为单一自包含二进制文件,使得安装Go应用程序变得简单;具体来说,用Go编写的程序可以在任何系统上运行,而无需任何现有库、运行时或依赖项。而且,使用Go编写的程序具有即时启动时间,类似于C或C++,但其他编程语言无法达到。

Cobra

Cobra 是用于创建强大的现代CLI应用程序的库。

Urfave CLI

Urfave cli 是用于在Go中构建命令行应用程序的简单、快速且有趣的包。

ORMs

对象关系映射(ORM)是计算机科学中一种使用面向对象编程语言在类型系统之间转换数据的编程技术。实际上,这创建了一个“虚拟对象数据库”,因此是一种抽象层,可以从编程语言内部使用。

Gorm

GORM 是针对Golang的出色ORM库,旨在使开发人员友好。它是用于处理关系数据库的ORM库。此gorm库是在database/sql包的基础上开发的。ORM的概述和功能包括:全功能的ORM(几乎)

Web框架

Go语言有几个著名的Web框架,其中最常见的包括:

Beego

Beego 用于在Go中快速开发企业应用,包括RESTful API、Web应用和后端服务。它受到了Tornado、Sinatra和Flask的启发。beego 具有一些Go特定的功能,如接口和结构嵌套。

Gin

Gin 是一个用Go编写的高性能HTTP Web框架。Gin 具有类似Martini的API,并声称速度最高可达40倍。Gin 允许您在Go中构建Web应用程序和微服务。

Web Frameworks

Revel

Revel 将端点组织到控制器中。它提供简单的数据绑定和表单验证。Revel 使得在规模上使用Go模板变得简单。可以在操作之前或之后注册功能。

Echo

Echo 是一个专注于性能的、可扩展的、开源的Go Web应用框架。它是一个介于stdlib +路由器和全栈Web框架之间的极简主义Web框架。

Gorilla

Gorilla 是用于Go编程语言的Web工具包,提供有用的、可组合的包,用于编写基于HTTP的应用程序。

Go Fiber

Go Fiber 是受Express启发的Golang框架。Go Fiber 是建立在快速HTTP之上的Web框架。它可以用于处理路由/端点、中间件、服务器请求等操作。

Buffalo

Buffalo 帮助您生成一个Web项目,该项目已经连接并准备好运行,从前端(JavaScript、SCSS等)到后端(数据库、路由等)都已经连接。从那里,它提供了一种在Go中快速构建Web应用程序的简单API。

Logging

Go具有内置功能,使程序员更容易实现日志记录。第三方也构建了额外的工具,以使日志记录更加容易。

Apex

用于Go的结构化日志记录包。

Zerolog

zerolog 包提供了一个专注于JSON输出的快速且简单的记录器。Zerolog 的API旨在既提供出色的开发人员体验,又具有惊人的性能。其独特的链接API允许zerolog 通过避免分配和反射来写入JSON(或CBOR)日志事件。

Zap

在Go中进行快速、结构化、级别日志记录。

Real-time Communication

Melody

Melody 是基于github.com/gorilla/websocket的websocket框架,它抽象出了处理websocket

的繁琐部分,让您可以编写实时应用程序。

Centrifugo

Centrifugo 是一个开源的可扩展实时消息服务器。Centrifugo 可以立即将消息传递给通过支持的传输连接的应用程序在线用户(WebSocket、HTTP流、SSE/EventSource、GRPC、SockJS、WebTransport)。Centrifugo 有通道的概念,因此它是一个面向用户的发布/订阅服务器。

API Clients

API客户端是一组从计算机上的应用程序操作的工)用于处理网站时传递用户功能。使用HTTP请求与REST API进行通信,以便用户可以导航到URL网站。这些URL可以返回存储为API的一部分的特定信息。

Heimdall

Heimdall 是一个HTTP客户端,可以帮助您的应用程序大规模进行请求。使用Heimdall,您可以:

  • 使用类似Hystrix的断路器来控制失败的请求
  • 为每个请求添加同步内存重试,可选择设置自己的重试策略
  • 为每个请求创建具有不同超时的客户端
  • 所有HTTP方法都以流畅的接口形式公开。

Grequests

Grequests 是Python Grequests库的Golang实现。功能包括:

  • 响应可以序列化为JSON和XML
  • 轻松上传文件
  • 轻松下载文件
  • 支持以下HTTP动词GET、HEAD、POST、PUT、DELETE、PATCH、OPTIONS

GraphQL

GraphQL 是用于API的查询语言,它提供了一个服务,优先考虑仅提供客户端请求的数据而不是更多数据。此外,您无需担心破坏更改、版本控制和向后兼容性等问题,就像REST API一样。因此,您可以通过使用GraphQL来实现您的版本并自动记录API。

GraphQL Go

Go的GraphQL包

GraphQL

Gqlgen

根据它们的文档,这是一个在不费力气的情况下构建GraphQL服务器的Golang库。

Testing Go Code

Go具有内置的测试命令,我们可以使用它来测试我们的程序。

Microservices

微服务是一种软件开发的架构方法,它允许从可部署服务中创建分布式应用程序,这些服务通过明确定义的API进行通信。它是对单体的解决方案。

Watermill

Watermill 是用于处理Go中的异步请求的事件流库。它提供多组实现用于发布/订阅。例如:您可以使用传统的发布/订阅实现,如Kafka或RabbitMQ,也可以使用HTTP或MySQL binlog,如果适合您的用例。

Rpcx

Rpcx 是类似于阿里巴巴Dubbo和微博Motan的RPC(远程过程调用)框架。使用Rpcx 的一些优势:

  • 简单:易于学习、易于开发、易于集成和易于部署
  • 性能:高性能(>= grpc-go)
  • 跨平台:支持原始字节切片、JSON、Protobuf和MessagePack。理论上它可以与java、php、python、c/c++、node.js、c#和其他平台一起使用
  • 服务发现和服务治理:支持zookeeper、etcd和consul。

Go kit

Go kit 是用于在Go中构建微服务(或优雅的单体)的编程工具包。它解决了分布式系统和应用架构中的常见问题,因此您可以专注于提供业务价值。

Micro

这是一个以API为先的开发平台。它利用微服务架构模式,并提供了一组服务,它们充当平台的构建块。

go-zero

go-zero 是一个内置了许多工程最佳实践的Web和RPC框架。它诞生于保证繁忙服务的稳定性,并且多年来一直为拥有数千万用户的站点提供服务。

Protocol Buffers

协议缓冲区(Protobuf)是一种免费、开源、语言中立、平台中立、可扩展的数据格式,用于序列化结构化数据。它类似于JSON,但更小、更快,并生成本地语言绑定。

使用协议缓冲区的一些优势包括:

  • 紧凑的数据存储
  • 快速解析
  • 在许多编程语言中可用
  • 通过自动生成的类进行优化功能

gRPC Go

gRPC(gRPC Remote Procedure Call)的Go语言实现。

Grpc gateway

gRPC-Gateway 在gRPC服务之上创建了一层,它将充当客户端的RESTful服务。它是protoc的插件。它读取gRPC服务定义,并生成一个将RESTful JSON API转换为gRPC的反向代理服务器。

Twirp

Twirp 是强调简单和极简的服务之间通信的框架。它从API定义文件生成路由和序列化,让您专注于应用程序的逻辑,而不是考虑HTTP方法和路径以及JSON之类的琐事。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关文章
|
29天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
13天前
|
缓存 前端开发 中间件
go语言中Web框架
【10月更文挑战第22天】
23 4
|
12天前
|
JSON JavaScript 前端开发
蓝桥杯web组赛题解析和杯赛技巧
本文作者是一位自学前端两年半的大一学生,在第十五届蓝桥杯Web组比赛中获得省一和国三。文章详细解析了比赛题纲,涵盖HTML、CSS、JavaScript、Echarts和Vue等技术要点,并分享了备赛技巧和比赛经验。作者强调了多写代码和解题思路的重要性,同时提供了省赛和国赛的具体流程及注意事项。希望对参赛者有所帮助。
|
18天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
56 4
|
17天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
45 2
|
1月前
|
前端开发 开发者 容器
构建响应式Web界面:Flexbox与Grid布局的深度解析
【10月更文挑战第11天】本文深入解析了CSS3中的Flexbox和Grid布局,探讨了它们的特点、应用场景及使用方法。Flexbox适用于一维布局,如导航栏;Grid布局则适用于二维布局,如复杂网格。通过示例代码和核心属性介绍,帮助开发者灵活构建响应式Web界面。
53 5
|
13天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
1月前
|
分布式计算 Java 应用服务中间件
NettyIO框架的深度技术解析与实战
【10月更文挑战第13天】Netty是一个异步事件驱动的网络应用程序框架,由JBOSS提供,现已成为Github上的独立项目。
39 0
|
5天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
18 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0

推荐镜像

更多