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

GO语言学习(一:背景与代码初始)

        最近刚好有一段空闲时间,想用这段时间学一些新鲜的知识,因此趁机接触了go语言(同时还想再深入学一下深度学习,我会发相关博客)

1.go语言的优势

  1. 简洁性:Go语言的设计哲学是简洁和高效。它的语法简单直观,易于学习和使用。相较于C++、Java等语言,Go语言的语法更加简洁,去掉了类和继承等概念,减少了程序员需要学习的复杂性。

  2. 高性能:Go是编译型语言,这意味着Go程序在运行前会被编译成机器码,这直接导致了其高性能。此外,Go语言的内存管理和垃圾回收机制也有助于提高性能。

  3. 并发支持:Go语言原生支持并发。它通过Goroutine和Channel等机制提供了简洁的并发编程模型,使得并发编程更加容易实现,这对于现代网络服务器和分布式系统来说尤为重要。

  4. 高效的并发调度:Go的运行时调度器采用了工作窃取算法,可以在多核CPU上高效地调度Goroutine,使得系统能够充分利用多核处理器的计算能力。

  5. 垃圾回收:Go语言包含自动垃圾回收功能,这有助于减少内存泄漏问题,提高程序的稳定性和可维护性。

  6. 跨平台编译:Go语言可以轻松地交叉编译,支持多平台和多种操作系统,编写一次代码,可编译运行于不同的平台,如Linux、Windows、macOS等。

  7. 丰富的标准库:Go拥有一个庞大的标准库,覆盖网络、并发、加密、数据处理等多个方面,这极大地提高了开发效率。

  8. 工具链完善:Go语言的工具链简单且易于使用,如go命令行工具、包管理、测试框架等,都极大地促进了Go语言的开发效率。

  9. 社区和支持:Go语言有一个活跃的社区,Google作为其背后的支持者,也不断地推动Go语言的发展和生态系统的建设。

2.第一个go程序

(1)写代码

package main

import "fmt"

func main() {
	fmt.Printf("Hello,world\n")
}

(2)运行

我这里写到指定的文件的目录下,再用‘go run 文件名’ 的方式运行文件

(3)代码分析

这行代码声明了该程序所在的包名是main。在Go中,每个程序都至少包含一个包,且每个包都有一个唯一的名称。main包是程序的入口点,意味着当程序运行时,会从main包开始执行。

import "fmt"

这行代码导入了fmt包,fmt是“format”的缩写,它提供了格式化输入和输出的功能。在这个例子中,fmt包被用来打印字符串到标准输出。

func main() {

这行代码定义了一个名为main的函数。在Go程序中,main函数是程序执行的入口点。当你运行一个Go程序时,它会从main函数的第一行代码开始执行。

fmt.Printf("Hello,world\n")

这行代码调用了fmt.Printf函数,它是fmt包中的一个函数,用于格式化并打印输出。这里它被用来打印字符串"Hello, world\n",其中\n是一个换行符,它会使得输出后在屏幕上产生新的一行。

3.语言特性

此部分是我参照了李文塔的《GO语言核心编程》,感觉很有价值,因此摘抄下来:

        编程语言有几百种,语法形式千差万别,将这些语法进行抽象概括,剔除表现形式的差异,就形成了一个个表达的语言特性,有些语言特性是某个语言独有的,但绝大部分语言特征是很多语言共有的,总的语言特性就几十种,下面归纳一下常用的高级语言的语言特征。

语言组织

        所有 的高级语言都使用源代码来表达程序,程序的语法格式千差万别,但表达这些语法的基本概念大同小异,主要包括:

  • 标识符和关键字
  • 变量和常量
  • 运算符
  • 表达式
  • 简单语句
  • 控制结构

类型系统

        每种高级语言都有自己的类型系统,类型系统的特性主要表现在以下几个方面。

  • 动静特性:动态语言还是静态语言
  • 类型强弱:强类型还是弱类型
  • 基本数据类型:包括类型及其支持的运算和操作集合
  • 自定义数据类型:包括类型及其支持的运算和操作集合

抽象特性

  • 函数:是否支持函数,匿名函数,高阶函数,闭包等
  • 面向对象:是否支持面向对象
  • 多态:如何支持多态
  • 接口:是否支持接口,以及接口实现模式

元编程特性

  • 泛型:是否支持泛型
  • 反射:是否支持反射,反射的能力

运行和跨平台语言特性

  • 编译模式:是编译成可执行程序,还是编译成中间代码,还是解释器解释执行
  • 运行模式:直接由OS加载运行,还是由虚拟机加载执行
  • 内存管理:是否支持垃圾回收
  • 并发支持:是否原生支持并发,还是库支持
  • 交叉编译:是否支持交叉编译
  • 跨平台支持:是否支持多个平台

语言软实力特性

  • 库:标准库和第三方库是否丰富,好用,高效
  • 框架:是否有非常出众的框架
  • 语言自身兼容性:语言规范是否经常变换,语言新版本向前兼容性
  • 语言影响力:是否有商业公司支持,社区的活跃性,是否是著名项目


http://www.kler.cn/a/467550.html

相关文章:

  • springboot适配mybatis+guassdb与Mysql兼容性问题处理
  • 智能客户服务:科技如何重塑客户服务体验
  • 力扣23.合并K个升序链表
  • jenkins入门--安装jenkins
  • 小程序学习06——uniapp组件常规引入和easycom引入语法
  • OpenCV计算机视觉 05 图像边缘检测(Sobel算子、Scharr算子、Laplacian算子、Canny边缘检测)
  • Nginx:SSL/TLS 配置
  • HTML5 动画效果:淡入淡出(Fade In/Out)详解
  • AI 热潮背后的沉重:解读 DeepMind 天才科学家 Felix Hill 的心声
  • WebGL 实践(一)开发环境搭建
  • Json与jsoncpp
  • 使用 Jupyter Notebook:安装与应用指南
  • 深度学习中的步数指的是什么
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的线上动物园售票系统设计
  • Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)
  • RocketMQ消费者如何消费消息以及ack
  • 继承(3)
  • Xilinx Vivado环境下载bit后自动触发ILA采集
  • TradingView功能
  • Chain of Agents(COA):大型语言模型在长文本任务中的协作新范式
  • 【Go学习】-01-5-网络编程
  • 前端网站部署遇到的问题
  • 牛客网刷题 ——C语言初阶(5操作符)——BC111 小乐乐与进制转换
  • 前端路由 Hash 和 History 模式原理对比区别
  • GNU链接器简介
  • 【算法刷题】链表