Go、Go开发要点、Go语言入门(go 开发语言)

Go

Go顾名思义是关注速度和效率的软件,一是运行速度,二是开发速度。Go的代码开发行数要明显少于C ,有些C 的项目可以移植到Go语言下实现。

对于大多数企业而言,他们早期的Web应用程序在构建时并未考虑到可扩展性和易用性。随着业务的增长,这些应用程序越来越难以处理更频繁的请求和更重的负载。面对类似的成长困境,一小队Google工程师在2007年开发了一种名为Golang的语言,简称Go。Go语言是Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google最初开发的一种编程语言。它是一种静态类型的语言,其语法与C相似。它提供了垃圾回收,类型安全性,动态键入功能以及许多高级内置类型,例如可变长度数组和键值映射。它还提供了丰富的标准库。 Go编程语言于2009年11月发布,并在Google的某些生产系统中使用。易于部署、强大的并发性和简单的语法使Go语言成为构建快速,可扩展的应用程序并与您的业务一起发展的出色语言。Go是出于完成工作的需要而创建的。这不是编程语言理论的最新趋势,而是解决现实世界问题的一种方法。它从具有静态类型的命令式语言中提取概念。它的编译速度快,执行速度快,并增加了易于理解的并发性,因为现在多核CPU很常见,并且已成功用于大型代码库(在Google处有大约1亿个本地代码)、标准库和庞大的社区。

那么,Go可以为您的项目带来什么好处?让我们看一下Go的一些功能,这些功能使其成为明智的开发选择。

编译语言

Go是一种编译语言。编译语言以其速度而著称,因为它们可以直接转换为机器级代码,可以直接由计算机读取,而不必每次运行应用程序时都被解释,例如网页上的JavaScript。因此,当您编写完源代码后,将通过编译器运行该编译器,该编译器会将源代码转换为可执行文件,可分发该文件以在另一台计算机上运行该程序。

编译器

除了作为一种编译语言的快速性之外,Go编译器还具有其他优点,例如能够检查错误,更易于部署以及能够优化代码以提高效率。

错误检查

Go编译器的错误检查功能能够检测出未使用的变量,缺少运行或键入错误或无效操作所需的包或导入的变量。

编译器会在程序的生成过程中发现这些错误。因此,Go甚至可以在运行程序之前让您了解什么有效,什么无效,从而节省了开发过程中的时间,而无需寻找bug。

交叉编译

Go的另一个独特功能是能够交叉编译您的应用程序,使其能够在与用于开发的计算机不同的计算机上运行。 Go编译器允许您使用简单的命令为不同的操作系统生成可执行二进制文件。无需将Go安装在外部计算机上,您可以轻松地交叉编译原始源代码以在多台计算机上运行。这使得将Go应用程序部署到生产服务器或本地计算机上变得轻而易举-只需移动最终的可执行文件即可。

其它特点

垃圾回收

垃圾回收或自动内存管理是Go语言的一项关键功能。 Go擅长对内存分配进行大量控制,并且在最新版本的垃圾收集器中大大降低了延迟,平均延迟低于1毫秒。 Go的垃圾收集器通过与程序同时运行并使用三色标记扫掠算法来实现此目的。

可伸缩性

由于Go是由Google构建的,因此在设计时考虑了可伸缩性。随着应用程序的增长,它们需要同时处理许多较小的子任务,例如将HTML页面传递到各个Web浏览器。在应用程序中同时运行任务称为并发。 Go具有许多旨在处理并发性的内置功能,最著名的是goroutine和通道。

Goroutines是能够与其他函数同时运行的函数。通道允许不同的goroutine相互通信,以确定如何最好地完成任务。

简单易懂

最后,Go简单易懂。借助非常小的语言规范文档,Go努力做到既易于阅读又易于编写。 Go官方网站还包括一个教程,可通过在浏览器中键入和练习代码来开始使用该语言。

Go开发要点

路由项目开发 (使用 gorilla/mux)

Go的net / http软件包为HTTP协议提供了许多功能。它做得不好的一件事是复杂的请求路由,例如将请求url分割成单个参数。幸运的是,有一个非常受欢迎的程序包,以Go社区中良好的代码质量而闻名。在此示例中,您将看到如何使用gorilla / mux包创建具有命名参数、GET / POST处理程序和域限制的路由。

安装gorilla/mux包

gorilla / mux是适用于Go的默认HTTP路由器的软件包。它具有许多功能,可以提高编写Web应用程序时的生产率。它还符合Go的默认请求处理程序签名功能(w http.ResponseWriter,r * http.Request),因此该包可以与其他HTTP库(例如中间件或现有应用程序)混合使用。使用go get命令从GitHub安装软件包,如下所示:

go get -u github.com/gorilla/mux

创建一个新的路由器

首先创建一个新的请求路由器。路由器是Web应用程序的主要路由器,以后将作为参数传递给服务器。它将接收所有HTTP连接,并将其传递给您将在其上注册的请求处理程序。您可以这样创建新的路由器:

r := mux.NewRouter()

注册请求处理程序

一旦有了新的路由器,就可以像往常一样注册请求处理程序。唯一的区别是,http.HandleFunc(…)您无需HandleFunc像调用那样在路由器上进行调用,而是这样:r.HandleFunc(…)。

URL参数

gorilla/mux路由器的最大优势是能够从请求URL中提取分段。例如,这是您的应用程序中的URL:

/books/go-programming-blueprint/page/10

该URL具有两个动态段:

  1. 书名(go-programming-blueprint)
  2. 页面(10)

要使请求处理程序与上述URL匹配,您可以使用URL模式中的占位符替换动态分段,如下所示:

r.HandleFunc("/books/{title}/page/{page}", func(w http.ResponseWriter, r *http.Request) { // get the book // navigate to the page })

最后一件事是从这些段中获取数据。该包带有功能mux.Vars(r)它接受http.Request作为参数并返回地图上的节段。

func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) vars["title"] // the book title slug vars["page"] // the page }

设置HTTP服务器的路由器

有没有想过什么nil在http.ListenAndServe(":80", nil)替换?它是HTTP服务器的主路由器的参数。默认情况下为nil,表示使用net/http程序包的默认路由器。要使用自己的路由器,请将替换为routernil 的变量r。

http.ListenAndServe(":80", r)

代码

This is the complete code that you can use to try out the things you’ve learned in this example.

package mainimport ( "fmt" "net/http" "github.com/gorilla/mux")func main() { r := mux.NewRouter() r.HandleFunc("/books/{title}/page/{page}", func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) title := vars["title"] page := vars["page"] fmt.Fprintf(w, "You've requested the book: %s on page %sn", title, page) }) http.ListenAndServe(":80", r)}

gorilla/mux路由器的功能

方法

将请求处理程序限制为特定的HTTP方法。

r.HandleFunc("/books/{title}", CreateBook).Methods("POST")r.HandleFunc("/books/{title}", ReadBook).Methods("GET")r.HandleFunc("/books/{title}", UpdateBook).Methods("PUT")r.HandleFunc("/books/{title}", DeleteBook).Methods("DELETE")

主机名和子域

将请求处理程序限制为特定的主机名或子域。

r.HandleFunc("/books/{title}", BookHandler).Host("www.mybookstore.com")

方案

将请求处理程序限制为http / https。

r.HandleFunc("/secure", SecureHandler).Schemes("https")r.HandleFunc("/insecure", InsecureHandler).Schemes("http")

路径前缀和子路由器

将请求处理程序限制为特定的路径前缀。

bookrouter := r.PathPrefix("/books").Subrouter()bookrouter.HandleFunc("/", AllBooks)bookrouter.HandleFunc("/{title}", GetBook)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年5月7日 上午8:45
下一篇 2023年5月7日 上午8:55

相关推荐

  • 市应急管理局“一把手”专题宣讲新国发2号文件精神

    “习近平总书记始终心系贵州发展、情系贵州人民,在贵州发展的每一个关键节点,都从战略和全局高度为贵州指方向、明任务、定目标。新国发2号文件这个大礼包赋予了贵州新征程上新的重大历史机遇…

    科研百科 2023年2月1日
    162
  • 博士学位论文可以申报课题吗(博士论文可以用来申请科研项目吗)

    博士论文可以用来申请科研项目吗 近年来,随着科学技术的不断发展,博士论文申请科研项目的现象越来越普遍。然而,对于申请科研项目的博士论文是否应该包括在申请中,存在着不同的观点。本文将…

    科研百科 2024年8月1日
    86
  • 项目管理系统交付策略

    项目管理系统交付策略 项目管理系统是一种能够帮助组织管理项目、提高效率的工具。在项目管理软件的交付过程中,确保交付物符合客户需求、满足质量要求、按时交付是至关重要的。本文将介绍项目…

    科研百科 2024年12月18日
    0
  • 科研项目问题 科研项目存在的问题及建议怎么写

    科研项目存在的问题及建议 随着科技的不断发展,科研项目成为了推动科技进步的重要力量。然而,科研项目也存在着一些问题和挑战,这些问题和挑战需要得到重视和解决。在本文中,我们将探讨一些…

    科研百科 2024年4月1日
    950
  • ACP敏捷项目管理与PMP®有什么区别

    敏捷是一种以人为核心,小步快跑,通过快速迭代快速反馈的工作方式,实现价值交付的理念及核心价值观,最初源于软件开发领域,现在更多的作为一种管理理念被应用的各行各业的管理体系中。 在敏…

    科研百科 2022年6月16日
    268
  • 以科技项目管理“绣花功夫”为科研人员解决“烦心事”

    党史学习教育开展以来,市科技局资源配置与管理处党支部聚焦市科技计划项目管理工作,以科技项目管理“绣花功夫”,切实为科研人员解难题、办实事。 资源配置与管理处是市科技局重要的综合业务…

    科研百科 2022年5月16日
    337
  • 新型科研项目种类分类

    随着科技的不断发展,科研项目的种类也在不断增多。根据研究目的、研究方法和研究成果的不同,科研项目可以分为许多不同的类别。本文将介绍一些当前较为热门的科研项目种类。 1. 人工智能科…

    科研百科 2025年3月12日
    0
  • 从事工程项目管理工作有哪些

    从事工程项目管理工作有哪些 工程项目管理是一项非常重要的工作,涉及到项目的规划、设计、实施和交付。作为一名工程项目管理人员,需要掌握一系列的技能和知识,以确保项目能够按时、按质、按…

    科研百科 2024年8月22日
    28
  • 敏捷项目管理知识和经验分享PPT「文末附下载链接」(敏捷项目管理例子)

    作者:PMO前沿大咖分享嘉宾暖益 PMP/Prince2/CSM 现任国内500强公司PMO,项目管理经验超过10年 链接地址:敏捷项目管理知识和经验分享PPT【文末附下载链接】 …

    科研百科 2022年9月9日
    235
  • 省科研项目 初审

    省科研项目初审 近年来,省科学技术厅高度重视科研项目的申报和评审工作,不断推动科技创新的发展。在这样的背景下,省科研项目的初审工作也在有条不紊地进行中。 作为一项重要的科技评估工作…

    科研百科 2025年3月2日
    0