首页 > 其他分享 >Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析

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

时间:2023-12-24 11:22:59浏览次数:51  
标签:学习指南 Web 语言 数据类型 应用程序 语句 API 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,关注后即可获取最新文章推送

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

标签:学习指南,Web,语言,数据类型,应用程序,语句,API,Go
From: https://www.cnblogs.com/xiaowange/p/17924184.html

相关文章

  • Web3公开课-第一讲
    Web3公开课-第一讲什么是Web3?Web1:用户只能在Web1的网站上单纯的获取信息,不可以上传自己的数据,网站没有交互效果,只是一堆信息的聚合。Web2:用户在Web2的网站或应用上可以读/写/进行交互,数据(私人信息)存储在中心化的服务器(可能会遭受到他人的审查)(例如:twitter等)。Web3:可拥有,例如以......
  • Web入门
    爆破一、ctf.showweb21穷举--base64解码登录使用BP抓包如下图所示,发送到拦截器里标记选择Payloads,Payloads类型选择自定义迭代该变红框的值进行多次值设置,本次需要进行三次设置,分别为账号冒号密码Position为1导入字典Position选择2写入:8.Position选择3导......
  • redis数据类型及指令
    ......1、list----------队列(先进先出)2、set-----------无序、两端取值、可遍历3、zset-----------有序set、两端取值、可遍历 String常用指令1、setkeyvalue2、getkey3、msetkey1val1key2val2.....4、mgetkey1key2.....5、setkey5----------设置字符......
  • WebMvcConfigurerAdapter
    WebMvcConfigurerAdapter 是SpringBoot1.x版本中用于自定义SpringMVC配置的一个类。但在SpringBoot2.x之后,这个类已经被标记为废弃,并推荐使用 WebMvcConfigurer 接口来替代。WebMvcConfigurerAdapter 提供了默认的实现,使得你可以在无需扩展 WebMvcConfigurer 接口......
  • 青少年CTF-qsnctf-Web-include01&include02(多种方法-知识点较多-建议收藏!)
    PHP常见伪协议php://filter是PHP中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。官方解释为:php://filter是一种元封装器,设计用于数据流打开时......
  • 16 json web token的基本介绍
    jwt全拼是jsonwebtoken。就是服务端给客户端一个加密的字符串。这个字符串中包含了一些信息,比如用户信息等。浏览器每次访问服务端时候,会携带这个字符串。然后服务的获取这个字符串后,通过解密,就可以获取携带的信息,比如用户信息等。这个加密的字符串,包含3部分内容,就是头部+负载+......
  • 数据类型转换的坑
    请求其他服务的接口,返回的数据类型为Map<String,Object>其中的某个key对应的Object中的类型为Double,于是在解析时直接用(Double)value进行强制类型转换然而啊然而后来被调用服务有所改动,Double类型变为Integer,于是出现强制类型转换错误为了避免此种情况出现,最好的办法是将......
  • 解决Electron中WebView加载部分HTTPS页面白屏的方法
    Electron是一个开源的桌面应用程序框架,它允许使用Web技术构建跨平台的桌面应用。在Electron应用中,WebView是一个常用的组件,用于嵌套加载Web内容。然而,有时候在加载使用HTTPS协议的页面时,可能会因为证书问题导致白屏现象。问题描述:当WebView尝试加载某些HTTPS页面时,如果页面的......
  • web富文本编辑框(2022-12-16)
    之所以加个时间,是因为在找一款合适的富文本编辑器的时候,发现好的多次被转载的帖子中推荐的那些所谓的开源编辑器都已经是付费产品了。于是耗费了大量时间从google中找了一些开源编辑器,这里简单记一笔。由于找到了够用的之后就没继续找了。1、https://simditor.tower.im/......
  • Spring Security without the WebSecurityConfigurerAdapter
     ENGINEERING | ELEFTHERIASTEIN-KOUSATHANA | FEBRUARY21,2022 | ...InSpringSecurity5.7.0-M2we deprecated the WebSecurityConfigurerAdapter,asweencourageuserstomovetowardsacomponent-basedsecurityconfiguration.Toassistwiththet......