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

学习基础知识

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

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

基本语法

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

Go 中的变量

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

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

数据类型

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

文章链接:Go 数据类型

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,关注后即可获取最新文章推送

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Vue3中的内置组件(transition)

本文主要介绍Vue3中的内置组件&#xff08;transition&#xff09;的普通写法和setup写法。 目录 一、在普通写法中使用内置组件&#xff08;transition&#xff09;二、在setup写法中使用内置组件&#xff08;transition&#xff09;三、使用注意项 在Vue3中&#xff0c;内置了…

3 个适用于 Mac 电脑操作的 Android 数据恢复最佳工具 [附步骤]

在当今的数字时代&#xff0c;无论是由于意外删除、系统故障还是其他原因&#xff0c;从 Android 设备中丢失数据不仅会带来不便&#xff0c;而且会造成非常严重的后果。特别是对于Mac用户来说&#xff0c;从Android手机恢复数据是一个很大的麻烦。幸运的是&#xff0c;随着许多…

CJson 使用 - 解析Object结构

简介 准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧步骤 下载 git clone https://github.com/DaveGamble/cJSON 或者直接压缩包下载也行, 毕竟国内有时候下载不下来Qt 中使用cJson 在下载的cJson 目录中加入cJson.pri, 内容如下 INCLUDEPATH …

ROBOGUIDE教程:FANUC机器人固定点焊焊接虚拟仿真

目录 概述 机器人系统创建 焊接工件模型创建 机器人抓手工具添加与工件安装 工作台添加与工件安装 固定点焊焊枪支架模型创建与组装 固定点焊焊枪添加与配置 机器人远程TCP标定(核心内容) 远程TCP手动测试 远程TCP指令介绍 机器人仿真程序编写 机器人示教编程 机…

九:爬虫-MongoDB基础

MongoDB介绍 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。它支持的数据结构非常松散&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大&#xff0c;其…

在深度学习中,端到端的含义

在深度学习中&#xff0c;端到端&#xff08;End-to-End&#xff09;指的是整个系统从输入到输出的完整学习过程&#xff0c;而不需要明确定义和手动设计中间的特征提取或处理步骤。具体而言&#xff0c;端到端深度学习方法强调通过一个统一的、端到端的模型&#xff0c;直接从…

【MySQL】数据库的SQL语句详解

目录 一、操作系统了解 二、关系型数据库与非关系型数据库的区别 三、关系型数据库的四种语言 四、DDL语言&#xff08;数据库定义语言&#xff0c;管理创建对象如库、表、字段、索引等&#xff09; 1、库的增删改查&#xff1b; 2、表的增删改查&#xff1b; 3、字段的增…

机场数据治理系列介绍(2):六图法开展数据治理的步骤与要点

目录 一、机场数据治理的六图法 1、何为六图法 二、应用数据治理六图法的相关工作步骤 1、制定战略目标 2、梳理业务情况 3、收集需求 4、构建数智应用地图 5、选择合适的算法 6、建立数据地图 7、持续改进和优化 三、相关要点 1、明确数据治理三张清单 2、持续构…

Chainlink 开发者故事:Krypton 从构思到产品的 Chainlink BUILD之旅

识别问题&#xff0c;构思解决方案&#xff0c;建立它&#xff0c;推出它&#xff0c;然后扩展它。这就是科技初创企业的操作手册。 现在&#xff0c;前Chainlink黑客马拉松获奖者&#xff0c;当前的Chainlink BUILD成员Krypton已经进行到了第四步&#xff1a;推出。Krypton团…

敏捷开发 - 知识普及

敏捷开发- Scrum 前言 知乎有一篇文章描写Scrum,我觉得比较好:https://zhuanlan.zhihu.com/p/631459977 简单科普下PM和PMO 原文来源:https://zhuanlan.zhihu.com/p/546820914 PM - 项目经理(Project Manager) ​ 需要具备以下能力 ​ 1.号召力 2.影响力 3.交流能力 4.应…

IDEA的facets和artifacts

在软件开发领域&#xff0c;IDEA 是指 JetBrains 公司的 IntelliJ IDEA&#xff0c;是一款流行的集成开发环境&#xff08;Integrated Development Environment&#xff09;。在 IntelliJ IDEA 中&#xff0c;"facets" 和 "artifacts" 是两个概念&#xff…

智能优化算法应用:基于材料生成算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于材料生成算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于材料生成算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.材料生成算法4.实验参数设定5.算法结果6.…

实习课知识整理3:首页商品列表的展示

对于一个购物商城的项目&#xff0c;主体还得是商品&#xff0c;这篇博客主要介绍如何将数据库中的信息渲染到页面上&#xff0c;这边后端是SpringBoot,前端是html配合thymeleaf模板 1. 编写查询数据库的方法 在这边我在页面上需要两部分的信息&#xff0c;一个是所有的商品&am…

MongoDB操作_数据库_集合

.......................................................................................................................................................... 三、MongoDB操作 3.1 数据库操作 一个mongodb中可以建立多个数据库。 MongoDB的默认数据库为"test…

Alnet网络分析与demo实例

参考自 up主的b站链接&#xff1a;霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 Fun_机器学习,pytorch图像分类,工具箱-CSDN博客 数据集下载 http://download.tensorflow.org/example_images/flower_photos.tgz 包含 5 中类型的花&#xff0c;每种…

论文降重方法同义词替换的效果对比与评价 快码论文

大家好&#xff0c;今天来聊聊论文降重方法同义词替换的效果对比与评价&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文降重方法同义词替换的效果对比…

信息学奥赛一本通2034:【例5.1】反序输出

2034&#xff1a;【例5.1】反序输出 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 79280 通过数: 35643 【题目描述】 输入nn个数,要求程序按输入时的逆序把这nn个数打印出来&#xff0c;已知整数不超过100100个。也就是说&#xff0c;按输入相反顺序打印这nn个…

Mysql四种事务隔离级别(简易理解)

读未提交&#xff1a;简单理解就是读到没有提交事务的执行结果&#xff1b;读已提交&#xff1a;简单理解就是只能读到已经提交的事务执行结果&#xff1b;可重复读&#xff1a;简单理解就是确保并发读取数据库时&#xff0c;读到的数据一致&#xff0c;这是mysql默认隔离级别&…

“AI行业百模大战:CSDN的光芒何以照亮前行之路

AI行业百模大战&#xff1a;CSDN的光芒何以照亮前行之路 百模大战的狂潮中&#xff0c;AI行业蓬勃发展&#xff0c;如潮水般席卷而来的不仅有技术的腾飞&#xff0c;更有对行业格局的深刻改写。在这波涛汹涌的激流中&#xff0c;CSDN&#xff08;程序员社区&#xff09;作为推…

LIMS实验室管理软件多少钱 智慧实验室管理系统价格

随着实验室管理需求的日益复杂&#xff0c;实验室信息管理系统(LIMS)逐渐成为实验室管理的必备工具。然而&#xff0c;对于许多实验室而言&#xff0c;选择合适的LIMS系统是一项挑战&#xff0c;其中价格是一个重要的考虑因素。本文将以白码LIMS系统为例&#xff0c;探讨LIMS实…