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

Go-安装与基础语法

TOC

1. Go 安装与环境变量

1.1 下载

需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统,包括Windows、Linux和Mac OS。
在这里插入图片描述

对于Windows用户,下载.msi文件,然后双击该文件,按照提示进行安装即可。
对于Linux和Mac OS用户,可以下载.tar.gz文件,然后在终端中使用以下命令进行安装:

tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

这里,$VERSION表示下载的Go语言版本,$OS表示操作系统,$ARCH表示架构。

1.2 设置环境变量

安装Go语言后,需要设置环境变量。环境变量是操作系统用来指定运行环境的一种参数,例如,系统会通过PATH环境变量来查找可执行文件。
对于Go语言,需要设置GOROOTGOPATH两个环境变量。
GOROOT是Go语言安装的位置。如果按照默认设置进行安装,那么Go语言通常会被安装在/usr/local/go(Linux和Mac OS)或C:\Go(Windows)。
GOPATH是工作区位置。工作区是存放Go语言代码的地方,它应该包含三个子目录:src(源代码)、pkg(包文件)和bin(可执行文件)。
可以通过以下命令设置这两个环境变量:

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

这些命令将GOROOT设置为Go语言的安装位置,将GOPATH设置为工作区,然后将这两个位置的bin子目录添加到PATH环境变量,使得可以直接运行这些目录中的可执行文件。
使用

go version

验证是否安装成功:
在这里插入图片描述

2. Go 基本语法

2.1 Go关键字

关键词说明关键词说明关键词说明
break用于中断当前循环或开关语句的执行。default用于开关语句中的默认情况。func用于声明一个函数或方法。
interface用于声明一个接口类型,定义了一组方法的集合。select用于选择可以进行通信的多个通道操作。case用于开关语句中的每个情况。
defer用于延迟执行一个函数调用,通常用于释放资源或处理错误。go用于启动一个新的协程(goroutine),以并发执行函数或方法。map用于声明一个映射(字典)类型,用于存储键值对的无序集合。
struct用于声明一个结构体类型,用于组织和存储多个字段的集合。chan用于声明一个通道类型,用于在协程之间进行通信。else用于在if语句中,当条件为假时执行的代码块。
goto用于无条件地转移到程序中的另一个标签。package用于声明一个包,包含一组相关的Go语言源文件。switch用于根据表达式的值选择不同的执行路径。
const用于声明一个常量,其值在编译时确定且不可更改。fallthrough用于开关语句中的穿透下一个情况。if用于条件判断,根据条件的真假执行不同的代码块。
range用于迭代数组、切片、映射或字符串等可迭代对象的元素。type用于声明一个自定义类型,可以是基本类型的别名或结构体等复合类型。for用于循环执行一段代码块,可以用于迭代、条件判断等。
continue用于跳过当前循环的剩余代码,并开始下一次循环。import用于导入其他包,以便在当前包中使用其功能。return用于从函数中返回结果。
var用于声明一个变量,可以是任何类型。

Go的关键字并不是很多,只有25个关键字。

2.2 数据类型

数据类型说明数据类型说明
bool布尔类型,表示真或假。int整数类型,表示整数值。
int88位有符号整数类型,表示范围为-128到127的整数。int1616位有符号整数类型,表示范围为-32768到32767的整数。
int3232位有符号整数类型,表示范围为-2147483648到2147483647的整数。int6464位有符号整数类型,表示范围为-9223372036854775808到9223372036854775807的整数。
uint88位无符号整数类型,表示范围为0到255的整数。uint1616位无符号整数类型,表示范围为0到65535的整数。
uint3232位无符号整数类型,表示范围为0到4294967295的整数。uint6464位无符号整数类型,表示范围为0到18446744073709551615的整数。
float3232位浮点数类型,表示范围为IEEE-754 32位浮点数。float6464位浮点数类型,表示范围为IEEE-754 64位浮点数。
complex6464位复数类型,由两个32位浮点数表示实部和虚部。complex128128位复数类型,由两个64位浮点数表示实部和虚部。
string字符串类型,表示一串字符。runeUnicode字符类型,表示一个Unicode码点。
byte字节类型,表示一个8位无符号整数。uintptr无符号整数类型,用于存储指针的整数值。

2.3 变量&常量

变量:
使用var关键字声明一个变量:

var a int

这行代码声明了一个名为a的变量,类型为int。如果没有给变量赋值,它将被初始化为零值。对于int类型,零值是0。
也可以在声明变量的同时给它赋值:

var a int = 10

如果在声明变量的同时赋值,Go语言可以自动推断变量的类型,所以可以省略类型:

var a = 10

如果要声明多个变量,可以这样做:

var a, b, c int
var (a intb float64c string
)

在函数内部,你可以使用更简洁的:=操作符声明并初始化变量(仅限函数内部):

a := 10

常量:
使用const关键字声明一个常量:

const PI float64 = 3.141592653589793

这行代码声明了一个名为PI的常量,类型为float64,值为3.141592653589793。一旦声明,不能改变一个常量的值。

const (PI = 3.141592653589793E  = 2.718281828459045
)

一次性声明多个.

注意,尽管可以省略常量的类型,但是Go语言并不会自动推断常量的类型。如果省略了常量的类型,那么这个常量可以被认为是任何类型,只要它是合法的。
例如,可以将上面的PI常量用在任何需要float64或int类型的地方。

2.4 运算符

运算符含义举例
++ --自增和自减a++ a--
+ - ! ^ * & <- &^一元运算符+a -a !a ^a *a &a <-ch &^a
* / % << >> & &^乘法、除法、取余、左移、右移、位与、位清空a*b a/b a%b a<<b a>>b a&b a&^b
+ - | ^加法、减法、位或、位异或a+b a-b a|b a^b
== != < <= > >=等于、不等于、小于、小于等于、大于、大于等于a==b a!=b a<b a<=b a>b a>=b
<-接收操作符v <- ch
&&逻辑与a && b
||逻辑或a || b
= += -= *= /= %= <<= >>= &= &^= |= ^=赋值、加等、减等、乘等、除等、取余等、左移等、右移等、位与等、位清空等、位或等、位异或等a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a&^=b a|=b a^=b

2.5 流程控制

流程控制说明流程控制说明
switch用于根据表达式的值选择不同的执行路径。select用于在多个通道操作中选择一个可执行的操作。
for用于循环执行一段代码块,可以用于迭代、条件判断等。for-range用于迭代数组、切片、映射或字符串等可迭代对象的元素。
if用于条件判断,根据条件的真假执行不同的代码块。break用于中断当前循环或开关语句的执行。
continue用于跳过当前循环的剩余代码,并开始下一次循环。标签用于在循环或开关语句中标记一个位置,以便在其他地方进行跳转。
goto用于无条件地转移到程序中的另一个标签。

3. HellowWorld

创建一个hello.go的文件,不需要IDE,使用文本编辑器就行。
写入如下代码:

package mainimport "fmt"func main() {fmt.Println("hello world")
}

和其他编程语言相同,Go也是main作为主入口,而且需要注意,必须是package mainmain是主入口。
使用go run hello.go运行:
在这里插入图片描述

相关文章:

Go-安装与基础语法

TOC 1. Go 安装与环境变量 1.1 下载 需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统&#xff0c;包括Windows、Linux和Mac OS。 对于Windows用户&#xff0c;下载.msi文件&#xff0c;然后双击该文件&#xff0c;按照提示进行安装即可。…...

【同济子豪兄斯坦福CS224W中文精讲】NetworkX代码学习笔记

文章目录 安装配置创建图可视化图图数据挖掘参考资料 安装配置 matplotlib中文字体设置 import networkx as nx import matplotlib.pyplot as plt # 魔法指令&#xff0c;设置后在jupyter notebook中绘制的图形会显示在输出单元格中&#xff0c;而不是弹出一个新窗口 %matplo…...

java+ssm+vue代码视频学习讲解

一、ssm 1.项目文件结构 2.数据库连接信息 3.其他配置信息 4.java代码文件目录介绍 5.entity层代码 6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系 7.controller层代码 8.登陆拦截功能实现 AuthorizationInterceptor.java 9.文件上传功能 …...

[计算机提升] 创建FTP共享

4.7 创建FTP共享 4.7.1 FTP介绍 在Windows系统中&#xff0c;FTP共享是一种用于在网络上进行文件传输的标准协议。它可以让用户通过FTP客户端程序访问并下载或上传文件&#xff0c;实现文件共享。 FTP共享的用途非常广泛&#xff0c;例如可以让多个用户共享文件、进行文件备份…...

R语言将list转变为dataframe(常用)

在R语言使用中常常遇到list文件需要转变为dataframe格式文件处理。这是需要写循环来进行转换。IOBR查看其收录的相关基因集(自备)_iobr_deg-CSDN博客 示例文件 list文件&#xff1a; 循环转换为dataframe data <- signature_tme dat <- as.data.frame(t(sapply(data, …...

【JAVA】OPENGL+TIFF格式图片,不同阈值旋转效果

有些科学研究领域会用到一些TIFF格式图片&#xff0c;由于是多张图片相互渐变&#xff0c;看起来比较有意思&#xff1a; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式…...

Linux系统中使用ln命令创建软连接

大家应该和我一样&#xff0c;第一次听到软连接这个词时感觉好高级啊&#xff0c;但其实也就那么回事&#xff0c;你完全可以将他类比为Windows系统中的快捷方式。 链接只是一个指向&#xff0c;并不是物理移动&#xff0c;类似Windows系统的快捷方式 1.功能和语法 功能&…...

Spark---RDD(Key-Value类型转换算子)

文章目录 1.RDD Key-Value类型1.1 partitionBy1.2 reduceByKey1.3 groupByKeyreduceByKey和groupByKey的区别分区间和分区内 1.4 aggregateByKey获取相同key的value的平均值 1.5 foldByKey1.6 combineByKey1.7 sortByKey1.8 join1.9 leftOuterJoin1.10 cogroup 1.RDD Key-Value…...

后台代码New出来DataGridTextColumn 动态添加到DataGrain 设置 Margin属性

在 WPF 中给 DataGridTextColumn 设置 MarginProperty 可以通过自定义 DataGridTemplateColumn 来实现。以下是一个示例代码&#xff1a; <DataGrid><DataGrid.Columns><DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTempla…...

MySQL面试题(下)

09&#xff09;查询学过「张三」老师授课的同学的信息 SELECTs.*,c.cname,t.tnameFROMt_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score scWHEREt.tidc.tid and c.cidsc.cid and sc.sids.sid and tname 张三 10&#xff09;查询没有学全所有课程的同学的…...

【Linux】如何检查Linux用户是否具有sudo权限

问题背景或前提知识 在Linux系统中&#xff0c;sudo&#xff08;superuser do&#xff09;是一个重要的命令&#xff0c;它允许普通用户以系统管理员的身份执行命令。了解用户是否拥有sudo权限对于系统管理和安全性来说是非常重要的。 技术名词解释 sudo&#xff1a;一种程序…...

2024.1.13 Kafka六大机制和Structured Streaming

目录 一 . Kafka中生产者数据分发策略 二. Kafka消费者的负载均衡机制 三 . 数据不丢失机制 生产者端是如何保证数据不丢失的呢&#xff1f; Broker端如何保证数据不丢失 消费端如何保证数据不丢失 Kafka中消费者如何对数据仅且只消费一次 四 . 启动Kafka eagle命令 数…...

遥感影像-语义分割数据集:Landsat8云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;在全球不同区域的分辨率15米。这些图像采集自Lansat8的五种主要土地覆盖类型&#xff0c;即水、植被、湿地、城市、冰雪和贫瘠土地。 KeyValue卫星类型landsat8覆盖区域未知场景水、植被、…...

YOLOV8在coco128上的训练

coco128是coco数据集的子集只有128张图片 训练代码main.py from ultralytics import YOLO# Load a model model YOLO("yolov8n.yaml") # build a new model from scratch model YOLO("yolov8n.pt") # load a pretrained model (recommended for trai…...

设计模式——享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的主要目的是通过共享已存在的对象来大幅度减少需要创建的对象数量&#xff0c;从而降低系统内存消耗和提高性能。它通过将对象的状态划分为内部状态&#xff08;Intrinsic State&#xf…...

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…...

云原生周刊:K8sGPT 加入 CNCF | 2024.1.8

开源项目推荐 VolSync VolSync 使用 rsync 或 rclone 在集群之间异步复制 Kubernetes 持久卷。它还支持通过 Restic 创建持久卷的备份。 KubeClarity KubeClarity 是一种用于检测和管理软件物料清单 (SBOM) 以及容器映像和文件系统漏洞的工具。它扫描运行时 K8s 集群和 CI/…...

LightGBM原理和调参

背景知识 LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架&#xff0c;具有支持高效率的并行训练、更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以处理海量数据等优点。 普通的GBDT算法不支持用mini-batch的方式训练&#xff0c;在每一次…...

ROS无人机开发常见错误

飞控部分 一、解锁时飞控不闪红灯&#xff0c;无任何反应&#xff0c;地面站也无报错 解决办法&#xff1a; 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值&#xff0c;如果没有&#xff0c;检查遥控器是否打开&#xff0c;遥控器和接收…...

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为视频格式&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的图像的技术背景在NEOAPI SDK里实现相机图像转换为视频格式 工业相机通过OpenCV实现相机图像转换为视频格式的优…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...