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

[Go语言快速上手]初识Go语言

目录

一、什么是Go语言

二、第一段Go程序

1、Go语言结构

注意

2、Go基础语法

关键字

运算符优先级 

三、Go语言数据类型

示例

小结


一、什么是Go语言

        Go语言,通常被称为Golang,是一种静态类型、编译型的计算机编程语言。它由Google的Robert Griesemer、Rob Pike及Ken Thompson等设计,并于2009年正式发布。Go语言的设计目标是为了提高开发效率和运行效率,在处理并发性方面尤其出色,它内置了对并发的支持,使得编写高并发程序变得简单。

Go语言的特点包括:

  • 简洁性:语法清晰简洁,减少了代码中的冗余部分。
  • 性能:由于是编译型语言,其执行速度接近于传统的编译型语言如C或C++。
  • 并发支持:通过goroutines和channels机制简化了并发编程。
  • 标准库:提供了丰富的标准库,使得开发者可以快速构建网络服务和其他应用。
  • 工具链:拥有强大的工具链支持,例如用于依赖管理的"go mod"以及测试框架等。

与C++相比,Go语言的设计更加现代,简化了很多C++中复杂的特性,同时提供更好的开发体验和更高的生产率。C++是一种功能强大且灵活的语言,支持面向对象编程、泛型编程以及过程化编程,但是它的学习曲线较陡峭,且容易出现内存管理和类型安全方面的问题。

Python则是一种解释型的高级编程语言,以简洁明了的语法著称,非常适合快速开发以及作为脚本语言使用。Python广泛应用于科学计算、Web开发、数据分析等领域,而且拥有庞大的第三方库生态系统。相比于Python,Go语言在执行效率上要高得多,但在易用性和开发速度上可能不如Python。

Go语言介于C++提供的底层控制能力和Python的高级抽象之间,旨在提供一种平衡点,即保持高性能的同时也易于编写和维护。

二、第一段Go程序

对于Go语言的学习,推荐去菜鸟教程学习基本的使用(适用于有编程基础的同学)

1、Go语言结构

Go 语言的基础组成有以下几个部分:

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

第一段go程序

package main //package main 定义了包名import "fmt" //告诉 Go 编译器这个程序需要使用 fmt 包func main() { //main 函数是每一个可执行程序所必须包含的fmt.Println("hello world") //可以将字符串输出到控制台,并在最后自动增加换行字符fmt.Print("hello golang")
}

运行后在终端输出

注意

1.需要注意的是 { 不能单独放在一行,否则在运行时会产生错误

2.Go语言允许你在每一行的末尾省略分号,这与一些其他语言(如Java)不同。虽然Go编译器会自动插入分号,但良好的习惯还是应该保持每一行逻辑完整。

3.go语言import了一个包但是没有使用会报错,(如果使用IDE,在本地IDE中会自动删除没有使用的包,同理也会自动添加使用的包)

我们还可以使用 go build 命令来生成二进制文件

 

2、Go基础语法

Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。(这些概念与其他编程语言类似)

在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。

如果你打算将多个语句写在同一行,它们则必须使用 ; 

关键字

运算符优先级 

go中的运算符与C/C++中大差不差,下面是运算符优先级(由上至下代表优先级由高到低)

三、Go语言数据类型

Go 语言按类别有以下几种数据类型:

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字:

package main //package main 定义了包名
import "fmt"func main() { //main 函数是每一个可执行程序所必须包含的var a string = "hello "  //声明格式fmt.Print(a)var b = "world"   //自动类型推断fmt.Print(b)var c, d int= 1, 2 //一次声明多个变量fmt.Println(c, d)
}

如果不初始化默认零值

package mainimport "fmt"func main() {var i intvar f float64var b boolvar s stringfmt.Printf("%v %v %v %q\n", i, f, b, s)
}

 

示例

下面是一个使用示例:

package mainimport ("fmt"
)func main() {// 声明并初始化一个布尔型变量var isCompleted bool = true// 使用简短声明 :=isRunning := false// 输出布尔变量fmt.Println("isCompleted:", isCompleted)fmt.Println("isRunning:", isRunning)// 声明并初始化一个整型变量var count int = 10// 使用简短声明 :=age := 25// 输出整型变量fmt.Println("count:", count)fmt.Println("age:", age)// 声明并初始化一个浮点型变量var temperature float64 = 23.5// 使用简短声明 :=weight := 70.5// 输出浮点型变量fmt.Println("temperature:", temperature)fmt.Println("weight:", weight)// 声明并初始化一个字符串变量var name string = "Alice"// 使用简短声明 :=greeting := "Hello, World!"// 输出字符串变量fmt.Println("name:", name)fmt.Println("greeting:", greeting)// 对数字类型进行算术运算result := count + int(weight)fmt.Println("result of addition:", result)// 字符串拼接fullName := name + " " + "Smith"fmt.Println("fullName:", fullName)// 使用字符串格式化输出fmt.Printf("%s is %f years old.\n", name, float64(age))
}

小结

以上就是一些Go语言的简单使用,如果有其他语言编程基础的话很容易就能上手,因为他非常的简洁,Go语言的设计目标是在性能和生产力之间找到一个平衡点,从而创建一种适合大规模系统开发的语言。

尽管Go语言在某些方面受到了C++的影响,比如C风格的语法,但它并不是C++的超集,而是有选择性地吸取了C++的优点,并抛弃了一些复杂和难以掌握的部分。同时,Go语言的设计也考虑到了Python等现代语言的生产力优势,比如简洁的语法、强大的标准库等,但又避免了Python在性能上的劣势。

总的来说,Go语言试图融合C++的高效性和Python的易用性,创造了一种既适合系统级编程又能满足大规模服务端开发需求的语言。然而,它并不是这两种语言特性的简单叠加,而是在这两者之间寻找了一个新的平衡点。

相关文章:

[Go语言快速上手]初识Go语言

目录 一、什么是Go语言 二、第一段Go程序 1、Go语言结构 注意 2、Go基础语法 关键字 运算符优先级 三、Go语言数据类型 示例 小结 一、什么是Go语言 Go语言,通常被称为Golang,是一种静态类型、编译型的计算机编程语言。它由Google的Robert Gr…...

基于STM32的智能风扇控制系统设计

引言 本项目将基于STM32微控制器设计一个智能风扇控制系统,通过温度传感器实时检测环境温度,并根据预设的温度范围自动调节风扇的转速。该系统展示了STM32的PWM输出、传感器接口以及自动控制应用的实现。 环境准备 1. 硬件设备 STM32F103C8T6 开发板…...

OpenCV 形态学相关函数详解及用法示例

OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),顶帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT),击中…...

Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区

文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…...

华为 HCIP-Datacom H12-821 题库 (31)

🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1. 默认情况下,IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…...

占位,凑满减

占位,凑满减...

SpringBoot校园资料平台:从零到一的构建过程

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

czx前端

一、盒模型 标准盒模型:box-sizing: content-box。 外边距边框内边距内容区。 IE盒模型,怪异盒模型:box-sizing: border-box。 外边距内容区(边框内边距内容区)。 二、CSS特性 继承性: 父元素的字体大小&#xf…...

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前,Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系统及其协作套件的强大功能与最新动态,助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场,带来《Perforce Helix C…...

【含文档】基于Springboot+Andriod的成人教育APP(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

CentOS7系统配置Yum环境

新安装完系统的服务器往往缺少我们常用的依赖包,故需要设置好yum源,方便软件安装,以下是CentOS7为例,系统安装后yum默认安装。 //备份之前的配置文件 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir -p /etc/yum.repos.d 1…...

pyqt打包成exe相关流程

1、首先是安装pyinstaller, 在cmd中输入以下安装命令: pip3 install pyinstaller -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 2、安装完毕之后,下一步就是找到你要打包的工程,打包的logo放置如下位置: 3、将log…...

设计模式、系统设计 record part02

软件设计模式: 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化,图形化 2.各种图(9…...

github双重验证(2FA)启用方法

一、双重验证-2FA 在去年看到过说github启用双重验证的通知,觉得做为一个普通开发者,可能没有这么快会要求启用。结果,今天早晨一来就收到了邮件,要求说在11月底完成2FA的认证,否则权限受限。真是无了语。所谓2FA好理…...

《Linux从小白到高手》理论篇:Linux的系统服务管理

值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动,并在后台持续运行,为系统和用户提供特定的功能。例如,网络服务、打印服务、数…...

SQL中如何进行 ‘’撤销‘’ 操作-详解

在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。 ### 1. 事务控制 在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作…...

Hadoop之WordCount测试

1、Hadoop简介: Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型。HDFS是一个高度容错的系统&#xf…...

Vue和axios零基础学习

Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行,切换成淘宝镜像源,安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件,在终端输入…...

STM32新建工程-基于库函数

目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件,并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号,然后点击OK。 …...

matlab入门学习(二)矩阵、字符串、基本语句、函数

一、矩阵 1、矩阵生成 %矩阵生成%直接法 A[1,2,3; 4,5,6; 7,8,9]%冒号一维矩阵:开始,步长,结束(步长为1时可以省略) B1:1:10 B1:10 %函数法%linspace(开始,结束,元素个数),等差生成…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...