[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的易用性,创造了一种既适合系统级编程又能满足大规模服务端开发需求的语言。然而,它并不是这两种语言特性的简单叠加,而是在这两者之间寻找了一个新的平衡点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用HTML5+CSS+JavaScript庆祝国庆

用HTML5CSSJavaScript庆祝国庆 中华人民共和国的国庆日是每年的10月1日。 1949年10月1日,中华人民共和国中央人民政府成立,在首都北京天安门广场举行了开国大典,中央人民政府主席毛泽东庄严宣告中华人民共和国成立,并亲手升起了…

Vue3 中Ref的最佳实践

在vue3中如果我们需要获取一个响应式的变量,可以使用ref来定义一个变量。 const name ref( "" );name.value "test" 定义好后,就可以实现修改状态,更新UI的效果了。 在这个基础上,本文主要讨论跨组件时如何…

Discord:报错:A fatal Javascript error occured(解决办法)

按 Windows 键 R 并输入 %appdata% 选择 discord 文件夹并将其删除。 再次按 Windows 键 R 并输入 %LocalAppData% 选择 discord 文件夹并再次将其删除。 附加: 如果还不行,就通过官网下载吧,这个问题通过epic下载可能会有

Python并发编程挑战与解决方案

Python并发编程挑战与解决方案 并发编程是现代软件开发中的一项核心能力,它允许多个任务同时运行,提高程序的性能和响应速度。Python因其易用性和灵活性而广受欢迎,但其全局解释器锁(GIL)以及其他特性给并发编程带来了…

Docker面试-24年

1、Docker 是什么? Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像:Docker的…

FANUC机器人—PCDK

前言 FANUC提供了一种使用其 PC 开发人员套件 (PCDK) 从 PC 命令和配置机器人的简单方法。该套件允许 PC 访问机器人上的变量、寄存器、IO、程序、位置和警报;接下来,我将如何开始使用 C#。 连接到机器人 将以下突出显示的行添加…

网络威胁情报技术的进步

网络威胁形势不断演变,必然导致防御者和攻击者之间持续展开军备竞赛。幸运的是,网络威胁情报 (CTI) 技术的进步为安全专业人员提供了强大的工具,使他们能够保持领先地位。 本指南深入探讨了 CTI 的最新进展,让您了解这些技术如何…

【AI知识点】假设检验(Hypothesis Testing)

假设检验(Hypothesis Testing) 是统计推断中用来判断一个关于总体参数的假设是否成立的标准方法。它通过样本数据来做出推断,从而确定是否可以拒绝原先设定的假设。假设检验广泛应用于科学实验、社会调查、质量控制等领域,用于验证…

【学习笔记】手写一个简单的 Spring MVC

目录 一、什么是Spring MVC ? Spring 和 Spring MVC 的区别? Spring MVC 的运行流程? 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …

1分钟搞懂K8S中的NodeSelector

文章目录 NodeSelector是什么?为什么使用NodeSelector?怎么用NodeSelector?POD配置示例yaml配置示例 如何知道K8S上面有哪些节点,每个节点都有什么信息呢?1. 使用kubectl命令行工具查看所有节点及其标签2. 使用kubectl…

算法【Java】—— 二叉树的深搜

深搜 深搜简单来说就是一直递归到底,然后返回,以二叉树为例,就是从根节点出发一直搜索到叶子节点,然后想上返回。 这里简单说明一下:深搜的英文缩写是 dfs,下面定义深搜函数名我直接命名为 dfs 实战演练 …

网络基础知识笔记(五)接口管理

接口管理 1. 物理层的功能 物理层要解决的三个问题: 1-信号: 模拟信号,数字信号(一组有规律变化的电流脉冲) 2-传输介质: 同轴电缆,双绞线(电信号,电口),光纤(光信号,光口),(空气)电磁波(WiFi,…

内存占用估算方法

优质博文:IT-BLOG-CN 通过掌握每种数据类型的大小,就可以更准确地预测对象和数据的内存消耗。 一、基础数据类型 Java基础数据类型结构,在64位系统开启指针压缩情况下的内存占用字节数: booleanbytecharshortintlongfloatdoub…

QT系统学习篇(3)- Qt开发常用算法及控件原理

一、Qt中 Qt框架中和模块提供一些算法和常用函数 比如 double d1-59.6,d292.5;double d3qAbs(d1);double d4qMax(d1,d2);qDebug()<<"d3"<<d3<<"d4"<<d4<<endl;二、Qt窗口及控件原理设计 理解Qt窗口的生成、属性 1、Qt窗口…

PYTHON实现HTTP request的一些有用的函数

前言 我们知道&#xff0c;当需要设计一个程序和服务器进行交互时&#xff0c;往往会用到HTTP的request&#xff0c;即服务器有一个对外接口REST API&#xff0c;因此当向服务器发送符合格式要求的HTTP request时&#xff0c;服务器会给出响应&#xff0c;甚至执行一些任务。如…

码随想录算法训练营第62天|卡码网:97. 小明逛公园、127. 骑士的攻击

1. 卡码网 97. 小明逛公园 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1155 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0097.小明逛公园.html 思路&#xff1a; 使用Floyd 算法&#xff0c;目的是解决多源最短路问题&#xff0c;即 …

如何编写一个优雅的commit message

在Git中&#xff0c;git commit 命令扮演着至关重要的角色。它的主要作用是将暂存区&#xff08;staging area&#xff09;里的改动内容提交到本地仓库&#xff08;repository&#xff09;中&#xff0c;形成一个新的版本或提交&#xff08;commit&#xff09;。这个过程是 Git…

基于Node2Vec的图嵌入实现过程

目录 一、引言二、Node2Vec&#xff08;原理&#xff09;2.1 随机游走&#xff08;Random Walk&#xff09;2.2 嵌入学习2.3 Node2Vec 的优势 三、使用 Node2Vec 进行图嵌入&#xff08;实践&#xff09;3.1 读取和转换 JSON 文件为 Graph 对象3.2 训练 Node2Vec 模型3.3 二维嵌…

10款好用的开源 HarmonyOS 工具库

大家好&#xff0c;我是 V 哥&#xff0c;今天给大家分享10款好用的 HarmonyOS的工具库&#xff0c;在开发鸿蒙应用时可以用下&#xff0c;好用的工具可以简化代码&#xff0c;让你写出优雅的应用来。废话不多说&#xff0c;马上开整。 1. efTool efTool是一个功能丰富且易用…

Kotlin:2.0.20 的新特性

一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复&#xff0c;我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…