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

news2024/10/6 0:32:55

目录

一、什么是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 main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

 

示例

下面是一个使用示例:

package main

import (
	"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.coloradmin.cn/o/2190812.html

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

相关文章

关闭IDM自动更新

关闭IDM自动更新 1 打开注册表2 找到IDM注册表路径 1 打开注册表 winR regedit 2 找到IDM注册表路径 计算机\HKEY_CURRENT_USER\Software\DownloadManager 双击LstCheck,把数值数据改为0 完成 感谢阅读

存储电话号码的数据类型,用 int 还是用 string?

在 Java 编程中,存储电话号码的选择可以通过两种常见方式进行:使用 int 类型或 String 类型。这种选择看似简单,但实际上涉及到 JVM 内部的字节码实现、内存优化、数据表示、以及潜在的可扩展性问题。 Java 基本数据类型与引用数据类型的差异…

Windows安全加固详解

一、补丁管理 使用适当的命令或工具&#xff0c;检查系统中是否有未安装的更新补丁。 Systeminfo 尝试手动安装一个系统更新补丁。 • 下载适当的补丁文件。 • 打开命令提示符或PowerShell&#xff0c;并运行 wusa.exe <patch_file_name>.msu。 二、账号管…

使用seata管理分布式事务

做应用开发时&#xff0c;要保证数据的一致性我们要对方法添加事务管理&#xff0c;最简单的处理方案是在方法上添加 Transactional 注解或者通过编程方式管理事务。但这种方案只适用于单数据源的关系型数据库&#xff0c;如果项目配置了多个数据源或者多个微服务的rpc调用&…

thinkphp 学习记录

1、PHP配置 &#xff08;点开链接后&#xff0c;往下拉&#xff0c;找到PHP8.2.2版本&#xff0c;下载的是ZIP格式&#xff0c;解压即用&#xff09; PHP For Windows: Binaries and sources Releases &#xff08;这里是下载地址&#xff09; 我解压的地址是&#xff1a;D:\…

Spring中Bean创建过程中各个阶段的作用

文章目录 Instantiate&#xff08;实例化&#xff09;Populate properties&#xff08;填充属性&#xff09;BeanNameAwares setBeanName()BeanFactoryAwares setBeanFactory()ApplicationContextAwares setApplicationContext()Pre-initialization BeanPostProcessorsInitiali…

【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用

文章目录 从零到精通&#xff1a;全面揭秘Scikit-Learn在机器学习中的绝妙应用前言第一部分&#xff1a;深入了解Scikit-Learn的基础知识1. 什么是Scikit-Learn&#xff1f;2. 安装Scikit-Learn3. Scikit-Learn中的基本构件4. 数据集的加载与探索5. 数据预处理标准化数据 6. 构…

【Kubernetes】常见面试题汇总(五十五)

目录 121. POD 创建失败&#xff1f; 122. POD 的 ready 状态未进入&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kube…

C# 数组和集合

本课要点&#xff1a; 1、数组概述 2、一维数组的使用 3、二维数组的使用 4、数组的基本操作 5、数组排序算法 6、ArrayList集合 7、Hashtable类 8、常见错误 一 数组 1 数组引入1 问题&#xff1a; 简单问题&#xff1a;求4个整数的最大值&#xff1f; int a 40,…

C语言自定义类型联合和枚举(25)

文章目录 前言一、联合体联合体的声明联合体的特点联合体和结构体内存布局对比联合体的大小计算联合体的实际使用样例礼品兑换单判断当前机器是大端还是小端 二、枚举枚举的定义枚举类型的声明枚举类型的优点枚举类型的使用 总结 前言 关于自定义类型除了我们常用的结构体&…

Kubernetes-Operator篇-04-operator部署验证

1、部署命令 这个是很多博客教程都在使用的部署命令&#xff1a; make manifests make install export ENABLE_WEBHOOKSfalse make run我们使用之前的demo来进行部署验证&#xff1a;Kubernetes-Operator篇-02-脚手架熟悉 这里面涉及到的makefile的配置可以参考&#xff1a;…

10.5二分专练,二分边界情况,+1不加1的判断,方向判断,各种DEBUG

5 https://leetcode.cn/problems/minimum-speed-to-arrive-on-time/submissions/570242512/ 就是说总时间是 前n-1量汽车的运行时间&#xff0c;向上取整&#xff0c;然后再加上最后一辆列车的运行时间 最快的话是需要n-1个小时 搜索空间就是时速&#xff0c;左边界是1&#x…

数学建模 第三讲 - 简单的优化模型

在数学建模的学习过程中&#xff0c;第三章介绍了几种简单的优化模型&#xff0c;这些模型在实际生活中有广泛的应用。以下是对这些模型的整理和总结。 3.1 存贮模型 问题描述 配件厂为装配线生产产品&#xff0c;更换设备需要支付生产准备费&#xff0c;产量大于需求时需要…

Llama 3.2 微调指南

让我们通过微调 Llama 3.2 来找到一些精神上的平静。 我们需要安装 unsloth&#xff0c;以更小的尺寸实现 2 倍的快速训练 !pip install unsloth!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] githttps://github.co…

OpenCV马赛克

#马赛克 import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(coins.jpg,1) imgInfo img.shape height imgInfo[0] width imgInfo[1]for m in range(200,400): #m,n表示打马赛克区域for n in range(200,400):# pixel ->10*10if m%10 0 and …

初识Linux · 文件(1)

目录 前言&#xff1a; 回顾语言层面的文件 理解文件的预备知识 文件和磁盘 使用和认识系统调用函数 前言&#xff1a; 本文以及下篇文章&#xff0c;揭露的都是Linux中文件的奥秘&#xff0c;对于文件来说&#xff0c;初学Linux第一节课接触的就是文件&#xff0c;对于C…

Windows删除service服务

Windows删除service服务 找到命令提示符&#xff1a; 右键&#xff0c;以管理员身份运行 输入&#xff1a; sc delete 服务名 Windows根据TCP端口号查找进程PID再kill进程_windows tcpkill-CSDN博客文章浏览阅读5.3k次&#xff0c;点赞42次&#xff0c;收藏104次。Windows根据…

【408计算机考研课程】数据结构-数据结构在学什么?

前言 数据结构在学什么&#xff1f; 如何用程序代码把现实世界的问题信息化如何用计算机高效地处理这些信息从而创造价值 第一章&#xff1a;数据结构在学什么&#xff1f; 总览 什么是数据&#xff1f; 简介&#xff1a;数据是信息的载体&#xff0c;是描述客观事物属性的数、…

【在Linux世界中追寻伟大的One Piece】进程信号

目录 1 -> 信号入门 1.1 -> 生活角度的信号 1.2 -> 技术应用角度的信号 1.3 -> 注意 2 -> 信号的概念 2.1 -> 用kill -l命令可以查看系统定义的信号列表 2.2 -> 信号处理常见方式 3 -> 产生信号 3.1 -> Core Dump 3.2 -> 调用系统函数…

已解决-Nacos明明成功运行,但Spring报错连接不上

这天使用windows本地nacos的时候&#xff0c;一直报错&#xff1a; Caused by: com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTIN…