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运行:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Qt笔记

前言&#xff1a; 学习笔记的内容来自B站up主阿西拜编程 《Qt6 C开发指南 》2023&#xff08;上册&#xff0c;完整版&#xff09;_哔哩哔哩_bilibili《Qt6 C开发指南 》2023&#xff08;上册&#xff0c;完整版&#xff09;共计84条视频&#xff0c;包括&#xff1a;00书籍介…

FreeRTOS系统配置

一、前言 在实际使用FreeRTOS 的时候我们时常需要根据自己需求来配置FreeRTOS&#xff0c;而且不同架构 的MCU在使用的时候配置也不同。FreeRTOS的系统配置文件为FreeRTOSConfig.h&#xff0c;在此配置文件中可以完成FreeRTOS的裁剪和配置&#xff0c;这是非常重要的一个文件&a…

git修改历史(非最新)提交信息

二、修改最近第二次或更早之前的commit信息 当前有三次提交&#xff0c;从近到远分别为1、2、3 以修改第2次提交为例&#xff08;从最新往前数&#xff09; 1、使用命令git rebase -i HEAD~2 按i进入编辑模式&#xff0c;将对应的pick改为edit&#xff0c;然后ctrlc退出。最…

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作&#xff0c;本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中&#xff0c;在生成的exe中。动态链接库是在程序运行时链接的&#xff0c;可以在程序运行时调用加载库函数的方法来实现&…

【Linux运维】LVM和RAID学习及实践

LVM和RAID学习及实践 背景LVM简介新加硬盘的操作RAID-磁盘阵列应用场景RAID0RAID1其他结构RAID制作RAID 小结 背景 某台服务器的磁盘管理需要自己动手处理&#xff0c;找了一些资料也踩了一些坑&#xff0c;在这里记录一下&#xff0c;先介绍一下LVM和RAID这两个东西。在计算机…

通过反射修改MultipartFile类文件名

1、背景 项目上有这样一个需求&#xff0c;前端传文件过来&#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…

Golang中for和for range语句的使用技巧、对比及常见的避坑

Update1 2024.1.0更新&#xff1a; Go 团队将修改 for 循环变量的语义&#xff0c;Go1.21 新版本即可体验&#xff01; 今天看见了这篇文章&#xff0c;Go的1.22版本将更新&#xff0c;大致理解未会默认进行v&#xff1a;v这个操作&#xff0c;因此此文所概述的许多坑&#xf…

鸿蒙(HarmonyOS)应用开发指南

1. 概述 1.1 简介 鸿蒙&#xff08;即 HarmonyOS &#xff0c;开发代号 Ark&#xff0c;正式名称为华为终端鸿蒙智能设备操作系统软件&#xff09;是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…

imx6ull基于yocto工程的l汇编点亮ed

通过汇编点亮led 在裸机状态下通过汇编点亮led&#xff0c;即没有操作系统&#xff0c;(uboot kernel rootfs 都不需要实现&#xff09;。 led点亮原理 1.GPIO复用 根据原理图&#xff0c;找到led对应的引脚&#xff08;pin)&#xff0c;复用为GPIO&#xff08;只有GPIO才能…

Unity之角色控制器

PS:公司终于给我派任务了&#xff0c;最近几天都没学Unity&#x1f927;。 一、角色控制器的实现方式 目前小编知道的角色控制器实现方式有三种&#xff1a; 应用商店的角色控制系统Unity自己的角色控制器通过物理系统去做角色控制器 本篇介绍的是第二种Unity自己的角色控制…

springboot集成jsp

首先pom中引入依赖包 <!--引入servlet--> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId> </dependency> <!--引入jstl标签库--> <dependency><groupId>javax.servle…

脱机I/O方式和假脱机系统

提示&#xff1a;在写这个博客的时候小编更加的觉得计算机基础知识的重要性了&#xff0c;而且对计算机的整个发展历程和计算机的底层工作原理特别感兴趣 脱机I/O方式和假脱机系统 一、脱机I/O方式二、假脱机系统1、假脱机技术&#xff08;SPOOLing&#xff0c; simulataneaus …

[NSSCTF Round#16 Basic] CPR

打着玩玩&#xff0c;比赛很简单。 Crypto pr 一个RSA题&#xff0c;n1p*q,n2q*r给了两个c和p,r而且flag经过pad用单因子无法解出。分别用p,r解完再取crt from Crypto.Util.number import * import randomflagplaintext NSSCTF{****************} charset abcdefghijklmn…

Open CASCADE学习|基于visual studio 2022编译源码

目录 1、简介 2、下载 2.1下载visual studio 2022 community 2.2下载下载cmake工具 2.3下载源码 2.4下载第三方插件 3、安装 3.1安装visual studio 2022 community 3.2安装cmake 4、编译源码 5、测试 1、简介 Open CASCADE&#xff08;简称…

【b站咸虾米】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 三、vue语法 继续回到官…

python爬虫,验证码识别,携带cookies请求

古诗词网案例!!! 识别验证码类型: # 此处用到的图片验证码识别网址为:http://ttshitu.com/ 图鉴 import base64 import json import requests # 一、图片文字类型(默认 3 数英混合): # 1 : 纯数字 # 1001:纯数字2 # 2 : 纯英文 # 1002:纯英文2 # 3 : 数英混合 # 1003:…

GC6109——双通道5V低电压步进电机驱动芯片,低噪声、低振动,应用摄像机,机器人等产品中

GC6109是双通道5V低电压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机的变焦和对焦系统&#xff0c;万向节和其他精密、低噪声的STM控制系统。该芯片为每个通道集成了256微步驱动器。带SPl接口&#xff0c;用户可以方便地调整驱动器的参数。内…

【信号与系统】【北京航空航天大学】实验一、信号的MATLAB表示及信号运算

一、实验目的 1、初步掌握 MATLAB 仿真软件的使用&#xff1b; 2、学习使用 MATLAB 产生基本时域信号&#xff0c;并绘制信号波形&#xff1b; 3、学习利用 MATLAB 实现信号的基本运算&#xff1b; 4、利用 MATLAB 分析常用的连续时域信号。 二、实验内容 1、 生成连续信号 …

1、理解Transformer:革新自然语言处理的模型

目录 一、论文题目 二、背景与动机 三、卖点与创新 四、解决的问题 五、具体实现细节 0. Transformer 架构的主要组件 1. 注意力、自注意力&#xff08;Self-Attention&#xff09;到多头注意力&#xff08;Multi-Head Attention&#xff09; 注意力到底是做什么的&…

【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究

目录 主要内容 模型研究 结果一览 下载链接 主要内容 该模型以环境保护成本和运行成本为双目标构建了微电网优化调度模型&#xff0c;模型目标函数和约束条件复现文献《基于改进粒子群算法的微电网多目标优化调度》&#xff0c;程序的特点是采用非支配排序的蜣螂…