【Go语言快速上手(一)】 初识Go语言

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Go语言专栏⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学习更多Go语言知识
  🔝🔝


在这里插入图片描述

Go快速上手

  • 1. 前言
  • 2. Go语言简介(为什么要学它?)
  • 3. Go语言的第一段程序及解释
  • 4. 变量以及数据类型
    • 4.1 整型和浮点型
    • 4.2 字符串和布尔类型
    • 4.3 指针类型
  • 5. Go语言中的标识符
  • 6. 总结以及拓展

1. 前言

本Go语言专栏适合有一定编程基础的同学来学习(IT小白建议先打好基础),本专栏中对于Go语言的学习重在快速上手,期间可能会将go语言的语法与C++或Java的进行对比

本章重点:

本篇文章会着重讲解,为什么掌握了C++或Java后,还需要学习Go?Go中有哪些数据类型?是怎样定义的?Go语言的基本语法和C++有什么区别?Go语言的标识符遵循什么规则?

本篇文章默认大家已经安装好了GO语言的环境,如果你还没有安装好,可以常考这篇文章(或者问GPT):

GO的安装与环境配置

在这里插入图片描述


2. Go语言简介(为什么要学它?)

Go语言又被称为golang,它的创始人有三位,每一位都是重量级人物,那么go语言它有下面几大特性:

在这里插入图片描述

不知道你也没有发现,Go语言的这些优点,恰恰对应了C++的缺点,好像Go语言的问世就是为了来替代C++的.在后面的Go语言学习中,你也会看见一些C++的身影,如果你了解C++11或C++14的语法新特性,你也会发现C++已经慢慢变成了我们不熟悉的样子(编码更简单了)

为什么要学习Go语言?

这里我将给出三个原因:

  1. 互联网的大中小厂都在转Go语言

像大家熟知的字节跳动,b站,百度的后端现在大部分都使用go进行开发,而我实习的鹅厂也是如此,现在鹅厂QQ部门的新代码全部都是go实现的,已经不见当年C++辉煌的身影了.所以学习GO语言的一大原因就是互联网企业对语言有大变革,所以掌握Go语言在校招中会很加分.

  1. 使用Go的效率更高

正如上面Go语言的特定一样,Go语言在实际的开发中,代码更简洁,开发效率更高,并且不会有类似于C++的内存泄漏问题.当今时代各种网络服务,网络软件层出不穷,开发效率会直接影响到一个公司是否能存活.并且Go语言的学习路线很平滑,不像C++一样难学(毕竟C++的创始人都没精通C++),所以go语言可以大众化,你不需要像C++工程师一样掌握很多底层的细节才能开发,相对于GO语言给程序员降低了门槛

  1. 上图

在这里插入图片描述

有句话说得好,叫做面向薪资编程
这就是学习GO最好的理由!!!


3. Go语言的第一段程序及解释

话不多说,直接上代码:

package main //声明这个文件所属的包,每一个go文件必须有归属的包
import "fmt"  //引入程序中要用的包(类似于C的包含头文件,使用库函数)
func main(){ //main函数是程序的入口,和C一样
	fmt.Println("hello golang")
	fmt.Println("hello world")
	fmt.Println("hello tencent")
}

对代码的解释:

首先是第一行,声明这个文件所属的包,现在只需要记住,放main函数的文件,就使用package main. 第二行的import就类似于C的包含头文件,由于go语言的打印函数Println属于"fmt"这个包,所以需要先引入这个包,然后main函数内就执行打印语句

需要注意的点:

  1. GO语言的语句结尾会自动加分号(不用显示写)
  2. 若import了一个包,但没使用包中的方法,会报错.同理,定义一个并且后没有使用它,也会报错
  3. Printfln函数会自动给我们换行
  4. go语言的花括号{}只能像上面这样写(这也是使用go语言开发比较规范的原因之一)

示范案例:

func main(){ //正确
	
}
func main()//报错
{
	
}

if(x==1){//正确
...
}

if(x==1)//报错
{
...
}

4. 变量以及数据类型

先来看看go都有哪些数据类型:

在这里插入图片描述

本篇文章先介绍前五个


4.1 整型和浮点型

在此之前,需要知道go是怎样定义变量的:

//第一种,完整写法
var 变量名 变量类型 = 期望给变量的值
//比如:
var age int = 18
----------------------
//第二种,自动类型推导
var 变量名 = 期望给变量的值
变量名 := 期望给变量的值
//比如:
var height = 180 //系统会自动推导变量height的类型是int
grade := 95.5//自动推导为浮点型 

当然在定义变量时也可以不用赋初始值

整型和浮点型和C的几乎是一样的,int8,int16就代表这个变量只占8/16个比特位,除此之外,还能一次性定义多个变量,并且变量间进行赋值时,必须是相同的类型,否则会报错,实例如下:

var(
	age int = 18
	name string //字符串类型
	grade float32
)
var age,name,grade = 18,"NEO",7.8

grade = age //类型不匹配,报错
var age1 int = age //类型匹配,正常

整型和浮点型不初始化时,默认值都是0


4.2 字符串和布尔类型

使用byte来保存一个字符类型,而byte实际上就是uint8的别名,byte类型只能表示ASCII字符集中的字符(256个,刚好对的上uint8类型的范围),对于非ASCII字符(如中文或其他Unicode字符),应该使用rune类型

var ch rune = 'a'
fmt.Println(a)
fmt.Printf("a的值为: %c",a)

并且我们可以发现,直接使用Printfln打印a时,会打印出它的ASCII值,而不是a字符本身,所以想打出a字符本身可以使用Printf函数,使用方法和C的类似

字符串类型就是string

go语言中的string类型是不能被修改的,比如定义一个string类型变量: var str string = “abcd”,然后你修改str的第一个元素: str[0] = “x”,此时会直接报错.除此之外,string类型可以使用+,+=等运算符,对于+,+=而言,string变量会新开辟一份空间,然后再拷贝原数据,增加新数据

var str string = "abcdef"
str[0] = 'x"//会报错
str += "123456"

再一个,string类型有很多其他功能
在strconv包中,字符串转其他类型:

在这里插入图片描述

package main
import (
	"fmt"
	"strconv"
)
func main() {
	var s2 string = "true"
	var b bool
	b, _ = strconv.ParseBool(s2)
	fmt.Println(b)
}

可以发现,parse系列函数有两个返回值,一个是要转换的类型,如bool,还有一个就是错误类型err,如果你不想接收第二个返回值,可以使用下划线_来忽略它

布尔类型

Go语言的布尔类型用true和false表示
和C的几乎一样,所以就不过多阐述.

string类型变量的默认值是空串""
布尔类型变量的默认值是false


4.3 指针类型

go语言中的指针有一个特性,那就是它不能用来做运算,这也是go语言比C好学,且安全的原因之一,那么指针类型有以下几个特征:

  • 可以通过指针改变指向的值
  • 指针变量的不可以不匹配(int类型指针指向float类型变量)
  • 指针变量接收的一定是地址
var age int = 18
var ptr *int = &age
var pptr **int = &ptr
*ptr = 10
**pptr = 20

指针的使用也和C是一样的


5. Go语言中的标识符

首先,标识符就是指,变量,方法等
标识符有以下特征:

在这里插入图片描述

当然,GO语言中的标识符还有自己的一套起名规则.像业内常用的驼峰命名法,比如: QuickSort,在go语言中可不能轻易使用.因为GO语言中的变量或函数名的第一个字母大写,代表这个变量或函数可以被其他包调用(类似于C++的使用其他.cpp中的函数).而变量或函数名的第一个字符小写,代表此变量或函数只能在本包中使用(包可以理解为这个.go文件)


除此之外,go中还有一些关键字和运算符以其优先级,和C语言的大差不差,可以先了解一下:

在这里插入图片描述
在这里插入图片描述


6. 总结以及拓展

其实通过这篇文章的学习,我们已经能窥探到Go语言的简洁性了,并且学起来非常好上手,毕竟它很多内容其实都沿用C/C++的.而且越往后学我们越会发现,语言真的都是互通的,GO中有一些好用的语法,可能在C++11或C++17都被更新到C++里面去了,Java也是一样,可以在GO语言中看见其他语言的影子


🔎 下期预告:控制流程以及函数 🔍

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

婚恋相亲交友小程序婚介红娘同城相亲交友APP源码征婚礼物线下活动

一、用户交互与活动 婚恋广场:用户可以在此浏览和发布自己的征婚信息。服务大厅:提供平台的各种服务介绍和客服支持。同城约会:用户可以根据地理位置找到附近的约会对象。相亲派、一线牵:组织相亲活动和线上配对。视频秀、真心话…

【数据结构】习题之链表中倒数第k个节点

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉前路漫漫亦灿灿 前言 今天的题目是求出链表中倒数第k个节点。 链表中倒数第k个节点 题目为:. - 力扣(LeetCode) …

Java中队列

队列是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。在 Java 中,队列通常是通过链表或数组实现的,不同的实现类在内部数据结构和操作上可能有所不同。 1.原理 1.数据结构:队列的基本数据结构…

七大设计原则

在软件开发的领域中,随着技术的不断进步和市场需求的不断变化,软件系统的设计和维护变得越来越重要。为了确保软件系统能够长期有效地运行,并且能够在未来的发展中适应新的需求和技术变化,提高软件系统的可维护性和可复用性成为了…

机器学习—特征预处理和降维(四)

什么是特征预处理? 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化: 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化? 特征的单位或者大小相差较大…

vue源码解析——diff算法/双端比对/patchFlag/最长递增子序列

虚拟dom——virtual dom,提供一种简单js对象去代替复杂的 dom 对象,从而优化 dom 操作。virtual dom 是“解决过多的操作 dom 影响性能”的一种解决方案。virtual dom 很多时候都不是最优的操作,但它具有普适性,在效率、可维护性之…

BackTrader 中文文档(十一)

原文:www.backtrader.com/ 基准测试 原文:www.backtrader.com/docu/observer-benchmark/benchmarking/ 票号 #89 是关于添加对资产的基准测试的。理智的做法是,即使有一种策略,即使是正的,也低于简单跟踪资产将提供的内…

第⑭讲:Ceph集群管理:守护进程管理、日志管理和端口号配置

文章目录 1.Ceph各组件守护进程的管理方式2.守护进程管理操作2.1.Ceph所有组件的守护进程列表2.2.重启当前主机中所有的Ceph组件2.3.重启主机中所有的Monitor组件2.4.重启指定主机的Monitor组件2.5.重启指定的OSD组件 3.Ceph的日志管理4.Ceph集群各组件的守护进程5.Ceph集群各组…

All in One:Prometheus 多实例数据统一管理最佳实践

作者:淡唯(啃唯)、阳其凯(逸陵) 引言 Prometheus 作为目前最主流的可观测开源项目之一,已经成为云原生监控的事实标准,被众多企业广泛应用。在使用 Prometheus 的时候,我们经常会遇…

自然语言处理: 第二十六章大模型基底之Mistral 8x7B

文章地址: 2401.04088.pdf (arxiv.org) 项目地址: mistralai/mistral-src: Reference implementation of Mistral AI 7B v0.1 model 前言: 本文意在一文深度剖析Mistral 8X7B的关键改进点。 Mistral AI是一个由DeepMind和Meta的三位前员工在巴黎共同创立的AI公司。其在23年…

tsconfig.json文件常用配置

最近在学ts,因为tsconfig的配置实在太多啦,所以写此文章用作记录,也作分享 作用? tsconfig.jsono是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译 初始化一个tsconfig文件 tsc -init配置参数解释 …

股票开户佣金最低多少?万一!A股开户多少钱合适?

开户佣金 通常情况下,股票开户佣金只要在达成交易的前提才收手续的费用,即买入和卖出的时候。目前,国规定收取最高佣金的比例为千分之三。 也就是说,最高为成交金额的3%,一般都会小于这个比例。最低交易佣金是5元起&a…

mac中的VirtualBox不能分配USB设备到虚拟电脑

mac中的VirtualBox不能分配USB设备到虚拟电脑 检查工具-> 扩展包是否安装 Oracle_VM_VirtualBox_Extension_Pack-7.0.14.vbox-extpack检查usb设备是否打开 检查权限 允许VirtualBox访问:在“安全性与隐私”窗口中,选择“隐私”标签。 在左侧的列表中…

微信过期文件怎么恢复?四个高招助你轻松解决(2024新版)

“微信的文件未下载的情况下过期了,平时微信也没有登录在电脑上,之前也没有进行过数据备份,如何找回这个文件啊!!感谢回答!” “急求,当时忘记点击下载,现在急用微信文件下载不了&a…

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go 改动的地方 index.html 改动的地方 style.css 改动…

【Linux网络编程】TCP协议

TCP协议 1.TCP协议段格式4位首位长度序号和确认序号16位窗口大小6个标志位 2.确认应答机制3.超时重传机制4.连接管理机制如何理解连接如何理解三次握手如何理解四次挥手 5.流量控制6.滑动窗口7.拥塞控制8.延迟应答9.捎带应答10.面向字节流11.粘包问题12.TCP异常情况13.TCP小结1…

通讯录的实现(单链表版本)

我们首先要知道通讯录的实现是基于单链表的基础上的,所以我们首先要搞懂单链表。(注意:今天的代码量较多),但这不是阻挡我们前进的脚步,冲冲冲!!! 单链表的简要概述 我们…

剖析 SPI 在 Spring 中的应用

一、概述 SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要用于框架的开发中,比如Dubbo,不同框架中实现略有差异,但核心机制相同…

构建第一个ArkTS应用之stateStyles:多态样式

Styles和Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。 概述 stateStyles是属性方法,可以…

如何发布自己的Python库?

Python包发布 1、背景概述2、操作指南 1、背景概述 为什么我们要发布自己的Python库?如果你想让你的Python代码,通过pip install xxx的方式供所有人下载,那就需要将代码上传到PyPi上,这样才能让所有人使用 那么,如何发…