golang应用,golang应用框架

本文目录一览:

Go语言的应用

Go语言由Google公司开发,并于2009年开源,相比Java/Python/C等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪的C语言”。

Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛。BAT大厂正在把Go作为新项目开发的首选语言。

Go语言应用范围:

1、服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;

2、DevOps:运维生态中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go语言开发;

3、网络编程:大量优秀的Web框架如Echo、Gin、Iris、beego等,而且Go内置的 net/http包十分的优秀;

4、Paas云平台领域:Kubernetes和Docker Swarm等;

5、分布式存储领域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;

6、区块链领域:区块链里面有两个明星项目以太坊和fabric都使用Go语言;

7、容器虚拟化:大名鼎鼎的Docker就是使用Go语言实现的;

8、爬虫及大数据:Go语言天生支持并发,所以十分适合编写分布式爬虫及大数据处理。

bpftrace动态追踪golang应用-函数内联问题

在上一篇文章的golang代码中,函数add的上一行,增加了一条注释语句: //go:noinline 。在bpftrace追踪时,是否可以去掉?有什么作用?

为了说明该问题,设计一个例子。

golang代码中,有两个求和函数。其中,add1加上 //go:noinline ,另一个add2不加。代码如下:

bpftrace程序分别对函数add1和add2的输入参数、返回值进行追踪,代码如下:

执行程序后,可以看到bpftrace程序能够正常追踪到函数add1,但是无法追踪到函数add2。

通过上文中的示例代码,可以看到,没有加 //go:noinline 的函数无法被bpftrace程序追踪到。通过查阅golang相关文档,可以知道, //go:noinline 表示该函数在编译时,不会被内联。

使用 objump -S 生成golang程序的汇编代码如下:

通过汇编代码,我们可以看到,主函数中,地址 0x498e52 处 callq 498e00 调用了add1函数,地址 0x498ebb 处 movq $0x4,(%rsp) 直接计算求值。

因此,golang编译器在编译代码时,会对代码进行分析,并按照内联规则,将某些函数生成内联代码。一旦函数被内联,bpftrace将无法追踪到对应函数。也就是,上文中函数 add2 无法被追踪到。

针对golang程序中编译器内联的问题,可以通过禁止内联的方式来解决。禁止内联的方式有:

在实践中,可以通过 go build -gcflags=”-m -m” 来查看,哪些函数会在编译时执行内联,如:

从输出中,可以看到:

关于golang编译器进行内联的场景,可以参考golang源码:。

由于golang编译器内联优化,bpftrace可能无法正常追踪golang程序。在编写bpftrace脚本时,可以先使用 nm 命令查看一下可执行程序,是否存在需要追踪的函数的符号信息。如果没有则bpftrace将不能对其进行追踪。

前面的示例中,都是对 int 类型的参数进行追踪,那对于 string 类型的参数,是否也可以用同样的方式进行追踪?将在下一篇中进行讨论。

go语言适合做什么

go语言适用的领域有:

Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。

Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。

Go语言作为一门大型项目开发语言,在很多大公司相继使用,甚至完全转向Go开发,其中代表有Google、Facebook、腾讯、百度、阿里巴巴、京东、小米以及360、美团、滴滴以及新浪等,因此,Go语言的开发前景还是很不错的!

Golang入门到项目实战 | 第一个golang应用

1.创建一个文件夹,例如:golang入门到项目实战

2.在golang入门到项目实战文件夹中创建一个go文件,例如:test.go

3.在test.go中输入如下内容:

4.编译执行go run test.go

5.可仅选择编译执行go build test.go,则目录下会多出个exe程序

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/158922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-19 18:56
下一篇 2024-11-19 18:56

相关推荐

  • Ojlat:一款快速开发Web应用程序的框架

    Ojlat是一款用于快速开发Web应用程序的框架。它的主要特点是高效、易用、可扩展且功能齐全。通过Ojlat,开发人员可以轻松地构建出高质量的Web应用程序。本文将从多个方面对Oj…

    编程 2025-04-29
  • Zlios——一个多功能的开发框架

    你是否在开发过程中常常遇到同样的问题,需要不断去寻找解决方案?你是否想要一个多功能、易于使用的开发框架来解决这些问题?那么,Zlios就是你需要的框架。 一、简介 Zlios是一个…

    编程 2025-04-29
  • agavi开发框架

    Agavi是一个基于MVC模式的Web应用程序开发框架,以REST和面向资源的设计为核心思想。本文章将从Agavi的概念、优点、使用方法和实例等方面进行详细介绍。 一、概念 Aga…

    编程 2025-04-29
  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • Python unittest框架用法介绍

    Python unittest框架是Python自带的一种测试框架,可以用来编写并运行测试用例。在本文中,我们将从以下几个方面详细介绍Python unittest框架的使用方法和…

    编程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、轻量级、可扩展的RPC框架。其广泛被应用于阿里集团内部服务以及阿里云上的服务。该框架通过NIO支持高并发,同时还内置了多种…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • LuaEP:一款强大的Lua开发框架

    LuaEP是一个集成了可以快速开发web应用程序所需的组件的Lua开发框架。它以Lua语言为基础,提供了许多常用接口和库,使得开发者不需要从头开始编写web应用程序,而是专注于业务…

    编程 2025-04-28
  • Java持久层框架的复合主键实现

    用Java持久层框架来操作数据库时,复合主键是常见的需求。这篇文章将详细阐述javax.persistence复合主键的实现方式,并提供完整的示例代码。 一、复合主键的定义 复合主…

    编程 2025-04-27

发表回复

登录后才能评论