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语言,需要设置GOROOT和GOPATH两个环境变量。
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 | 整数类型,表示整数值。 |
| int8 | 8位有符号整数类型,表示范围为-128到127的整数。 | int16 | 16位有符号整数类型,表示范围为-32768到32767的整数。 |
| int32 | 32位有符号整数类型,表示范围为-2147483648到2147483647的整数。 | int64 | 64位有符号整数类型,表示范围为-9223372036854775808到9223372036854775807的整数。 |
| uint8 | 8位无符号整数类型,表示范围为0到255的整数。 | uint16 | 16位无符号整数类型,表示范围为0到65535的整数。 |
| uint32 | 32位无符号整数类型,表示范围为0到4294967295的整数。 | uint64 | 64位无符号整数类型,表示范围为0到18446744073709551615的整数。 |
| float32 | 32位浮点数类型,表示范围为IEEE-754 32位浮点数。 | float64 | 64位浮点数类型,表示范围为IEEE-754 64位浮点数。 |
| complex64 | 64位复数类型,由两个32位浮点数表示实部和虚部。 | complex128 | 128位复数类型,由两个64位浮点数表示实部和虚部。 |
| string | 字符串类型,表示一串字符。 | rune | Unicode字符类型,表示一个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 main的main是主入口。
使用go run hello.go运行:

相关文章:
Go-安装与基础语法
TOC 1. Go 安装与环境变量 1.1 下载 需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统,包括Windows、Linux和Mac OS。 对于Windows用户,下载.msi文件,然后双击该文件,按照提示进行安装即可。…...
【同济子豪兄斯坦福CS224W中文精讲】NetworkX代码学习笔记
文章目录 安装配置创建图可视化图图数据挖掘参考资料 安装配置 matplotlib中文字体设置 import networkx as nx import matplotlib.pyplot as plt # 魔法指令,设置后在jupyter notebook中绘制的图形会显示在输出单元格中,而不是弹出一个新窗口 %matplo…...
java+ssm+vue代码视频学习讲解
一、ssm 1.项目文件结构 2.数据库连接信息 3.其他配置信息 4.java代码文件目录介绍 5.entity层代码 6.controller,service,dao,entity层之间的关系 7.controller层代码 8.登陆拦截功能实现 AuthorizationInterceptor.java 9.文件上传功能 …...
[计算机提升] 创建FTP共享
4.7 创建FTP共享 4.7.1 FTP介绍 在Windows系统中,FTP共享是一种用于在网络上进行文件传输的标准协议。它可以让用户通过FTP客户端程序访问并下载或上传文件,实现文件共享。 FTP共享的用途非常广泛,例如可以让多个用户共享文件、进行文件备份…...
R语言将list转变为dataframe(常用)
在R语言使用中常常遇到list文件需要转变为dataframe格式文件处理。这是需要写循环来进行转换。IOBR查看其收录的相关基因集(自备)_iobr_deg-CSDN博客 示例文件 list文件: 循环转换为dataframe data <- signature_tme dat <- as.data.frame(t(sapply(data, …...
【JAVA】OPENGL+TIFF格式图片,不同阈值旋转效果
有些科学研究领域会用到一些TIFF格式图片,由于是多张图片相互渐变,看起来比较有意思: import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式…...
Linux系统中使用ln命令创建软连接
大家应该和我一样,第一次听到软连接这个词时感觉好高级啊,但其实也就那么回事,你完全可以将他类比为Windows系统中的快捷方式。 链接只是一个指向,并不是物理移动,类似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 来实现。以下是一个示例代码: <DataGrid><DataGrid.Columns><DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTempla…...
MySQL面试题(下)
09)查询学过「张三」老师授课的同学的信息 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)查询没有学全所有课程的同学的…...
【Linux】如何检查Linux用户是否具有sudo权限
问题背景或前提知识 在Linux系统中,sudo(superuser do)是一个重要的命令,它允许普通用户以系统管理员的身份执行命令。了解用户是否拥有sudo权限对于系统管理和安全性来说是非常重要的。 技术名词解释 sudo:一种程序…...
2024.1.13 Kafka六大机制和Structured Streaming
目录 一 . Kafka中生产者数据分发策略 二. Kafka消费者的负载均衡机制 三 . 数据不丢失机制 生产者端是如何保证数据不丢失的呢? Broker端如何保证数据不丢失 消费端如何保证数据不丢失 Kafka中消费者如何对数据仅且只消费一次 四 . 启动Kafka eagle命令 数…...
遥感影像-语义分割数据集:Landsat8云数据集详细介绍及训练样本处理流程
原始数据集详情 简介:该云数据集包括RGB三通道的高分辨率图像,在全球不同区域的分辨率15米。这些图像采集自Lansat8的五种主要土地覆盖类型,即水、植被、湿地、城市、冰雪和贫瘠土地。 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…...
设计模式——享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目的是通过共享已存在的对象来大幅度减少需要创建的对象数量,从而降低系统内存消耗和提高性能。它通过将对象的状态划分为内部状态(Intrinsic State…...
【Python机器学习】分类器的不确定估计——决策函数
scikit-learn接口的分类器能够给出预测的不确定度估计,一般来说,分类器会预测一个测试点属于哪个类别,还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计: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算法的框架,具有支持高效率的并行训练、更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以处理海量数据等优点。 普通的GBDT算法不支持用mini-batch的方式训练,在每一次…...
ROS无人机开发常见错误
飞控部分 一、解锁时飞控不闪红灯,无任何反应,地面站也无报错 解决办法: 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值,如果没有,检查遥控器是否打开,遥控器和接收…...
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为视频格式(C#) Baumer工业相机Baumer工业相机的图像转换为OpenCV的图像的技术背景在NEOAPI SDK里实现相机图像转换为视频格式 工业相机通过OpenCV实现相机图像转换为视频格式的优…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
