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

Go语言学习Day1:什么是Go?

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪)
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

      • 1、走近Go
        • ①Go语言的Logo
        • ②Go语言的创始人
        • ③Go语言的发展史
      • 2、Go语言的优势
        • ①Go语言的特性与优势
        • ②有哪些公司在用Go?
        • ③使用Go语言开发的项目
        • ④Go语言常用库
      • 3、Go环境搭建
        • ①官网下载go
        • ②下载好后
        • ③配置环境变量
      • 4、测试(Hello World!)

1、走近Go

①Go语言的Logo

Go语言,通常被称为Golang,是一种高效、静态类型的编程语言,旨在简化多核心、网络编程及大型软件项目的开发。Go语言的设计注重简洁性、高效编译和执行速度以及高效的并发处理能力。

image-20240321224411896

②Go语言的创始人

Go语言由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计,随后在2009年正式对外公开。这三位都是在谷歌工作的知名计算机科学家:

  • Robert Griesemer:曾参与Java HotSpot虚拟机的开发。
  • Rob Pike:Unix团队的成员,同时也是UTF-8字符编码的共同设计者。
  • Ken Thompson:Unix操作系统的共同发明人,同时也是著名的编程语言B和C的开发者。
③Go语言的发展史
  • 2007年:Go语言的构思和初步设计开始。
  • 2009年11月:Go语言被公开发布,标志着Go语言开源社区的开始。
  • 2012年:Go 1.0正式发布,这是Go语言的第一个稳定版本,为Go语言的发展奠定了基础。
  • 随后几年:Go语言持续发展,版本迭代速度稳定。社区和第三方库的生态也逐渐丰富起来。
  • 2015年:Go语言开始被广泛应用于商业和开源项目中,特别是在微服务、云计算和大数据处理领域。
  • 至今:Go语言继续增长其在开发者中的受欢迎程度,特别是在容器化(如Docker)、云服务(如Kubernetes)等现代计算领域。

Go语言的设计和发展史体现了它的目标:提供一种能够充分利用现代硬件架构的编程语言,同时让编程更加高效和愉快。Go语言简洁的语法、出色的并发支持和高效的性能,使其成为了当前软件开发领域的一个重要选择。

2、Go语言的优势

①Go语言的特性与优势

Go语言具有许多引人注目的特性和优势,使其成为开发者和公司的首选语言之一:

  1. 简洁、清晰的语法:Go语言的设计理念是简单和高效,这让新手容易上手,同时让经验丰富的开发者能够快速理解和修改代码。
  2. 并发编程支持:Go语言的并发模型是它的一大亮点。通过goroutines(轻量级线程)和channels(用于线程间的通信),Go让并发编程变得简单而直观。
  3. 静态类型语言:虽然编写起来几乎和动态类型语言一样自然,但Go是静态类型的,这意味着更早的错误发现和更好的性能。
  4. 强大的标准库:Go的标准库包含了大量用于处理网络、并发、数据解析、文本处理等的库,这些都是“开箱即用”的。
    在这里插入图片描述
②有哪些公司在用Go?

Go语言在许多知名公司中得到应用,包括但不限于:

  • Google:作为Go语言的诞生地,Google在其许多项目中使用Go,包括Docker和Kubernetes。
  • Uber:Uber使用Go语言来处理其高负载的地理位置服务和其他微服务。
  • Twitch:Twitch使用Go语言来处理其实时聊天系统中的高并发。
  • Dropbox:Dropbox使用Go来处理后端服务,特别是在处理大量的文件同步任务时。
  • Netflix:Netflix使用Go语言在其服务器端应用程序中实现高性能和高并发。
    在这里插入图片描述

国内的,比较有名的例如字节跳动等大厂也有在使用Go。

③使用Go语言开发的项目

一些著名的用Go语言开发的项目包括:

  • Docker:一个开源项目,用于自动化应用程序的部署在轻量级的容器中,它使得应用程序的部署更加简单和高效。
  • Kubernetes:一个由Google发起的开源平台,用于自动部署、扩展和管理容器化应用程序,是容器化应用管理的事实标准。
  • Prometheus:一个开源的系统监控和警报工具包,它使用Go语言开发,专为可靠性和高效性设计。
  • Golang Gin:一个高性能的Web框架,提供了一组丰富的功能,用于快速开发Web应用程序或微服务。
    在这里插入图片描述

Go语言凭借其出色的性能、并发处理能力和简洁的语法,成为了现代软件开发中的一个重要工具,特别是在云计算、微服务架构和大数据处理等领域。

④Go语言常用库

Go语言的标准库与Python等编程语言类似,以包的方式提供支持,下表列出了Go语言标准库中常见的包及其功能。

Go语言标准库包名功 能
bufio带缓冲的 I/O 操作
bytes实现字节操作
container封装堆、列表和环形列表等容器
crypto加密算法
database数据库驱动和接口
debug各种调试文件格式访问及调试功能
encoding常见算法如 JSON、XML、Base64 等
flag命令行解析
fmt格式化操作
goGo语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改
htmlHTML 转义及模板系统
image常见图形格式的访问及生成
io实现 I/O 原始访问接口及访问封装
math数学库
net网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等
os操作系统平台不依赖平台操作封装
path兼容各操作系统的路径操作实用函数
pluginGo 1.7 加入的插件系统。支持将代码编译为插件,按需加载(一个完整的go环境是很大也,只放需要的部分)
reflect语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值
regexp正则表达式封装
runtime运行时接口
sort排序接口
strings字符串转换、解析及实用函数
time时间接口
text文本模板及 Token 词法器

3、Go环境搭建

①官网下载go

https://go.dev/dl/

image-20240320231732608

②下载好后

双击安装包,一直下一步进行安装。

之后在控制台窗口输入“go version”可查看Go版本,检测是否安装成功。

image-20240320233504140

③配置环境变量

Go需要一个安装目录,还需要一个工作目录。即GOROOT、和GOPATH。其中GOROOT即为GO的安装目录。

image-20240320233600870

GOPATH即为存储Go语言项目的路径,可以自己进行设值,我放在了GoWorks自己建的,里面需要包含src、pkg、bin三个目录。

image-20240320234328112

如果你下载的开发工具没有这些识别项,需要检查环境变量是否配置了Goworks。

image-20240320233639282

如果是安装包安装的,系统环境变量自动配置的,如果压缩包安装,需要在PATH配置Go的命令。

image-20240320233704300

最后,打开控制台,输入命令go env查看是否配置成功。

image-20240320233750996

此时go环境搭建完成。

之后进官网下载Go语言IDE

①GoLand官网

image-20240320233935813

②安装

点击Download下载之后,一路下一步安装,基本上没太大需要改动的地方。

一般需要改动的地方在于安装目录。

安装好后,打开界面如下:

image-20240320234140012

4、测试(Hello World!)

写一个Hello World测试一下是否配置成功:

package main//用于引入 Go 语言的 fmt 包。
//fmt 包含有格式化 I/O(输入/输出)的函数,类似于 C 语言中的 printf 和 scanf,或者是 Python 中的 print 函数。
//例如:
//fmt.Println() 用于打印输出,同时在末尾加上换行符。
//fmt.Printf() 允许格式化字符串输出。
//fmt.Scanln() 等函数用于从标准输入读取。
import "fmt"func main() {fmt.Println("Hello World!")
}

image-20240320234451361

补充:常用的几种Print方式

1.Print

//输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用 %v)
fmt.Print(str)

2.Println

//输出到控制台并换行
fmt.Println(tmp)

3.Printf

var a int = 1
var b int = 2
var c int = 3
只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出整形变量和整形 等)
fmt.Printf("%d",a)
fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)

在 Printf中,有一些常用的格式化占位符,大家根据自己日常编程经验,记住常用的几个就行,其余的用到的时候再行查找:

  • %v 以默认的方式打印变量的值
  • %T 打印变量的类型
  • %s 正常输出字符串
  • %t 打印true或false
  • %p 带0x的指针
  • %d 整型
  • %#p 不带0x的指针
  • %o 不带零的八进制
  • %#o 带零的八进制
  • %x 小写的十六进制
  • %X 大写的十六进制
  • %#x 带0x的十六进制
  • %U 打印Unicode字符
  • %#U 打印带字符的Unicode
  • %b 打印整型的二进制
  • %q 字符串带双引号,字符串中的引号带转义符
  • %f (=%.6f) 6位小数点
  • %e (=%.6e) 6位小数点(科学计数法)
  • %g 用最少的数字来表示
  • %.3g 最多3位数字来表示
  • %.3f 最多3位小数来表示

很感谢你能看到这里,如有相关疑问,还请下方评论留言。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
希望本篇内容能对大家有所帮助,如果大家喜欢的话,请动动手点个赞和关注吧,非常感谢你们的支持!

相关文章:

Go语言学习Day1:什么是Go?

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…...

C语言内存函数之 memcmp函数

memcmp函数的记忆:mem表示内存,单位是字节,表示以单位字节来进行操作;头文件是string.h,cmp是compare的缩写,表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…...

3. C++ 常见的段错误及对策

常见的 C/C 段错误及对策 一、指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。 结构体成员指针未初始化;没有为结构体指针分配足够的内存;函数的…...

推荐的Kubernetes 学习资料

官方文档: Kubernetes 官方文档:https://kubernetes.io/docs/Kubernetes 教程:https://kubernetes.io/docs/tutorials/ 书籍: Kubernetes in Action,Marko Luksa 著Kubernetes Up and Running,Kelsey Hi…...

MySQL之索引与事务

一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表,存储着索引值和这个值所对应的物理地址无须对整个表进行扫描,通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…...

Linux的基本使用

1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…...

亚信安慧AntDB全景观察:数据库领域的创新者

随着大数据时代的到来,对数据库的需求愈发强烈。在这一背景下,国产数据库逐渐崭露头角,亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破,同时也致力于满足用户日益增长…...

Linux 系统是如何收发⽹络包的

Linux 系统是如何收发⽹络包的? ⽹络模型 为了使得多种设备能通过⽹络相互通信,和为了解决各种不同设备在⽹络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Mode…...

飞跃前端瓶颈:技术进阶指南精华篇

引言: 在互联网的快车道上,前端技术日新月异。对于前端工程师而言,技术水平达到一定高度后,往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈,分享实用的进阶策略和实践案例。 一、技术等级概览&#xf…...

Jenkins安装 Linux 更换镜像 安装插件

Jenkins安装 Linux 更换镜像 安装插件 前言 下面叙述了三种jenkins安装的方式,jenkins安装之前必须有java环境因为他是java写的… yum安装只能安装最新版本的jenkins,但是jenkins是java写的所以他强依赖java版本,当你的服务器的java版本与jenkins版本冲突时还需要给jenkins重…...

(一)基于IDEA的JAVA基础1

Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论&#xff0…...

FPGA开源项目分享——基于FPGA加速的热扩散模拟器

导语 今天继续分享康奈尔大学FPGA课程ECE 5760的典型案例——基于FPGA加速的热扩散模拟器。 (更多其他案例请参考网站: Final Projects ECE 5760) 1. 项目概述 项目网址 https://people.ece.cornell.edu/land/courses/ece5760/FinalProje…...

【ARM 嵌入式 C 入门及渐进 12 --寄存器位清0和置位函数实现】

文章目录 寄存器位清0和置位函数实现示例使用方式注意事项 寄存器位清0和置位函数实现 在 C 语言中,可以使用宏定义来创建用于清除(清零)或设置(置一)32位地址中特定位的函数。以下是两个宏定义的示例: #…...

Java实现10万,并发去重,优雅地处理重复请求!

对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。 重复的场景有可…...

《深入解析 C#》—— C# 3 部分

文章目录 第三章 C#3:LINQ及相关特性3.1 自动实现属性(*)3.2 隐式类型 var(*)3.3 对象和集合初始化3.3.1 对象初始化器3.3.2 集合初始化器 3.4 匿名类型3.4.1 基本语法和行为3.4.2 编译器生成类型3.4.3 匿名类型的局限…...

Redis 的5种数据类型的基本命令

目录 String的基本命令 1. SET 2. GET 3. GETSET 4. STRLEN 5. APPEND 6. SETRANGE 7. GETRANGE 8. SETEX 9. SETNX 10. MSET 11. MGET 12. INCR 13. DECR 14. INCRBY 15. DECRBY 16. INCRBYFLOAT Map的基本命令 1. HSET 2. HGET 3. HMSET 4. HMGET 5. …...

【Liunx-后端开发软件安装】Liunx安装nginx

【Liunx-后端开发软件安装】Liunx安装nginx 使用安装包安装 一、简介 nginx,这个家伙可不是你厨房里的那位大厨,它可是互联网世界的“煎饼果子摊主”。想象一下,在熙熙攘攘的网络大街上,nginx挥舞着它的锅铲——哦不,是…...

力扣Lc20--- 202.快乐数(java版)-2024年3月20日

1.题目 2.知识点 (1)while (seen.contains(n) false) { // 循环体 } 与 !seen.contains(n) 等同 (2) 当传入数字 19 给 isHappy(19) 方法时,下面是每一行代码的执行过程: 初始化一个空的 HashSet&#…...

机器学习----交叉熵(Cross Entropy)如何做损失函数

目录 一.概念引入 1.损失函数 2.均值平方差损失函数 3.交叉熵损失函数 3.1信息量 3.2信息熵 3.3相对熵 二.交叉熵损失函数的原理及推导过程 表达式 二分类 联立 取对数 补充 三.交叉熵函数的代码实现 一.概念引入 1.损失函数 损失函数是指一种将一个事件&#x…...

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署,所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通,之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...