当前位置: 首页 > news >正文

【Golang】第一弹-----初步认识GO语言

 笔上得来终觉浅,绝知此事要躬行

🔥 个人主页:星云爱编程

🔥 所属专栏:Golang

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

一、Go语言的简单介绍

1、Go语言(又称Golang)是由Google开发的一款开源编程语言,以其简洁、高效和并发支持著称。

2、GO语言的核心开发团队:Ken·Thompson(肯·汤普森)、Rob·Pick(罗布·派克)、RobertGriesemer。

3、GO语言诞生于2007年

二、Go语言的特点

简介:Go语言保证了即能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效性。使用一个表达式来形容Go语言:Go=C+Python。说明Go既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。

2.1核心特点

1. 简洁语法,易于学习

类C风格语法:语法接近C语言,但去除冗余符号(如分号、括号),代码清晰易读。
无复杂特性:不支持传统面向对象的继承、重载、异常处理等,避免过度设计。
显式错误处理:通过多返回值(如 result, err := func())强制开发者显式处理错误,增强代码健壮性。

2原生并发支持
Goroutine(协程):轻量级线程,由Go运行时管理,创建成本极低(约2KB内存),可轻松启动成千上万个并发任务。
Channel(通道):基于CSP(Communicating Sequential Processes)模型,通过channel实现协程间安全通信,避免共享内存的竞态问题。

3. 高效编译与执行
快速编译:编译器直接生成机器码(无需虚拟机),编译速度接近脚本语言(如Python),适合大型项目。
高性能:接近C/C++的执行效率,适合网络服务、系统工具等对性能要求高的场景。
内存管理:内置垃圾回收(GC),通过三色标记算法优化延迟,减少对业务逻辑的干扰。

4. 强大的标准库与工具链
丰富标准库:涵盖网络(net/http)、加密、文件处理、测试等,无需第三方库即可完成大部分开发。
内置工具:
  go fmt:自动格式化代码,统一代码风格。
  go test:内置测试框架,支持基准测试和覆盖率分析。
  go mod:模块化依赖管理(自Go 1.11起),告别GOPATH限制。
跨平台支持:一键交叉编译(如GOOS=linux GOARCH=amd64 go build),轻松生成不同操作系统和架构的二进制文件。

5. 静态类型与类型安全
强类型系统:编译时检查类型错误,避免运行时崩溃。
类型推断:支持:=语法自动推断变量类型(如 x := 42 推断为int)。
泛型支持(Go 1.18+)**:通过类型参数(Type Parameters)实现泛型编程,增强代码复用性。   
6. 面向工程的设计
代码可维护性:强制代码风格统一、包(Package)机制清晰,适合团队协作。
依赖管理简化:模块(Module)支持版本化依赖,解决传统包管理的碎片化问题。
文档友好:通过注释直接生成文档(`godoc`工具),降低维护成本。

7. 云原生与微服务生态
核心应用场景:
  容器与编排:Docker、Kubernetes等核心项目均用Go开发。
  微服务框架:如Gin、Echo、gRPC等高性能框架。
  基础设施工具:Prometheus(监控)、Consul(服务发现)、Terraform(基础设施即代码)等。

2.2 go与其他语言的对比

特性    Go  Java      PythonC++    
并发模型Goroutine线程/线程池多进程/协程线程
编译速度极快  中等解释执行
内存管理GCGCGC手动/智能指针
语法复杂度极简高(面向对象)简洁极高
典型应用场景云原生/微服务企业级应用脚本/数据分析系统级开发

2.3适用场景

1. 高并发网络服务:API网关、实时通信系统。
2. 云原生工具开发:容器、DevOps工具链。
3. 命令行工具:快速编译为独立二进制文件,无环境依赖。
4. 分布式系统:数据库、消息队列中间件。

2.4局限性

泛型生态待完善:泛型(Go 1.18+)的引入较晚,部分库尚未适配。
不适合GUI开发:标准库不提供图形界面支持。
灵活性受限:因设计取舍,无法实现某些复杂设计模式(如传统继承)。

三、go语言快速开发入门

要求:开发一个hello.go程序,可以输出hello,world

说明:

(1)go文件的后缀是.go

(2)package main:表示该hello.go文件所在的包是main包,在go中,每个文件都必须属于一个包。

(3)import "fmt" :表示导入一个包,包名为fmt,导入该包后,就能使用它的函数;

(4)func main(){} :func是一个关键字,表示一个函数,main是函数名,是一个主函数,同c一样,是程序的入口

(5)fmt.Println("hello,world") :表示调用fmt包中的Println函数输出hello,world

说明:

(1)通过go build命令对该go文件进行编译,生成.exe可执行文件

(2)通过go run命令可以直接运行hello.go程序;也可以直接运行hello.exe程序

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。


http://www.mrgr.cn/news/94058.html

相关文章:

  • 【A2DP】蓝牙A2DP协议剖析:从架构到规范
  • centos 7 安装apache服务
  • upload-labs-master通关攻略(17~19)
  • 瑞芯微RK3576(1)-硬件设计
  • DeepIn Wps 字体缺失问题
  • 暑期第一面oωo, TME一面面经
  • Linux上位机开发实战(x86和arm自由切换)
  • 【性能测试】Jmeter如何做一份测试报告(3)
  • 大模型架构记录3-1-Gradio 入门
  • 【FreeRTOS】FreeRTOS操作系统在嵌入式单片机上裸机移植
  • Maven的依赖管理
  • ubuntu 解决 DNS 代理设置错误,导致不能上网的 DoH、DoT问题
  • 统计登录系统10秒内连续登录失败超过3次的用户
  • 基于redisson实现接口幂等性
  • Jenkins链接私有仓库Failed to connect to repository,stderr: No ECDSA...的问题
  • bootloader相关部分
  • 通道注意力机制、空间注意力机制、混合注意力机制
  • 【Spring 事务】
  • PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
  • 【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据