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

Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程

1、为什么学习Go?

简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的软件生命周期工具;跨平台交叉编程,多平台编译;异步编程复杂性低,易维护,Go语言中Channel设计,异步程序写起来非常自然;语言层面支持并发,go关键字(协程)使得go的并发效率极高;严格的语法规范;Go的并发、性能、安全性、易于部署等特性,使它容易成为“云原生语言”。

Go语言设计之初,确定了三大原则:简洁性、可读性、功能性。

2、安装教程

安装Go

下载地址:        All releases - The Go Programming Language

选择合适的版本进行下载安装。

这里以 .msi 文件为例,进行安装教程。

双击 .msi 文件,进行下载

等待下载完成。

配置环境变量

在 电脑 > 属性  > 高级系统设置 > 环境变量

添加如下配置

在path中配置如下:

配置GOPATH:安装相关包时的下载位置

在path中添加GOPATH

配置GOPROXY:Go的代理,不配置的话,下载某些包会失败,需要科学上网。

验证是否安装成功

在命令行界面(cmd)输入        go env   ,出现以下内容即成功安装。

将 GO111MODULE 设置为 ON

在命令行界面输入

set GO111MODULE=on

到此,Go下载已经完成。

Go编程工具

这里,我使用的是VSCode,也可以选择使用Goland,下载地址如下:

GoLand by JetBrains: More than just a Go IDE

VSCode配置Go的编程环境

在VSCode的插件管理中,搜索 Go ,下载插件

 Hello,World!

// 导入 fmt 包并调用其中的 Println 函数输出 "Hello, world!"
// 导入类
package main
// 导入 fmt 包
import "fmt"
// 主函数
func main() {fmt.Println("Hello, world!")
}

二、基础语法 

1、变量

变量的标准定义: var 变量名 变量类型

变量占用多少的内存,是由变量的类型决定的

// 定义一个变量name,类型为string,然后通过fmt.Scanln()函数从控制台读取用户输入的姓名,并将其赋值给name变量。
// 最后通过fmt.Println()函数输出欢迎语,其中包含用户输入的姓名。
package mainimport "fmt"func main() {var name stringfmt.Println("Please enter your name:")fmt.Scanln(&name)fmt.Println("Hello, " + name + "!")
}

2、打包

将写好的程序进行发布,需要进行build操作。

golang可以打包成各个平台的可执行程序

// 打包 windows 执行程序
set GOOS=windows
set GOARCH=amd64
go build -o bin/app.exe main.go// 打包 Linux 执行程序
set GOOS=linux
set GOARCH=amd64
go build -o bin/app main.go// 打包 mac 执行文件
set GOOS=darwin
set GOARCH=amd64
go build -o bin/app_mac main.go

3、数据类型

go的数据类型分为以下几种:

        数值类型:整型 和 浮点型

        布尔类型:bool ,值为 true 和 false

        字符类型:byte (底层uint8)和 rune (int32)

        字符串类型:string

        其他类型:数组、指针、结构体、Channel、函数、切片、any、map

类型别名 

// 类型别名,给类型定义一个名称
type my_int int
// 这里是给int定义一个别名,为my_int

(1)数值类型

go提供有符号整型和无符号整型两种类型

有符号整型:int、int8、int16、int32、int64

无符号整型:uint、uint8、uint16、uint32、uint64、uintptr

注意:这里的8、16、32是位

        无符号整型 uintptr ,是用于存放指针的,没有具体的bit大小,但是足够容纳指针

        uintptr 类型在底层编程时才需要,特别是在Go与C的函数库或操作系统接口交互的地方

Go语言支持两种浮点型数据:float32 和 float64

输出时进行限制位数进行输出

如:fmt.print("%.5f",a) 即保留a的小数点后5位

(2)布尔类型

布尔类型只有 true 和 false ,且不能参与任何计算和类型转换

(3)字符类型

Go语言的字符类型有2种:

        uint8类型,或者叫byte型,代表ASCII码的一个字符

        rune类型,代表一个Unicode字符,当需要处理中文、日文或者其他复合字符时,需要用到rune类型。rune类型等价于int32类型。

ASCII定义128个字符,Unicode是ASCII的超集。

(4)类型推断

类型推断:可以使用 := 操作符进行变量声明和赋值,Go会根据右侧的值自动推断变量类型,例如:y := 5

零值: 未初始化的变量会被赋予零值,数字类型为0,布尔类型为false,字符串类型为空字符串等。

多变量声明: 可以同时声明多个变量,例如:var a, b, c int

package mainimport ("fmt"
)func main() {// 单变量赋值var a int = 1// 多变量赋值var b, c int = 2, 3// 多变量定义并赋值var (d int    = 4e int    = 5f string = "world")// 简化赋值g := "hello"// 打印变量值fmt.Println(a, b, c, d, e, f, g)
}

(5)常量

常量声明: 使用const关键字声明一个常量,例如:const pi = 3.14159。
常量赋值: 常量的值在声明时必须被赋值,一旦赋值后不可修改。
枚举常量: 可以使用一组常量来模拟枚举,例如:

const {a = 1b = 2
}

类型指定: 常量的类型也可以被指定,例如:const speed int = 300000。
常量表达式: 常量可使用表达式计算,例如:const secondsInHour = 60 * 60。
无类型常量: 常量可以是无类型的,根据上下文自动推断类型。例如,const x = 5会被推断为整数类型。

(6)类型转换

基本类型转换

在Go中基本类型可以互相转换,类型转换用于将一个数据类型转换成另一种数据类型。

显示类型转换

在Go中,使用强制转换,将一种数据类型转换成另一种数据类型。

        语法:destinationType(expression),例如,float(10)

不兼容类型的转换

在Go中不兼容的数据类型之间,不能转换

类型别名的转换

如果有类型别名,转换时,注意别名的兼容性

(7)运算符

算数运算符:

+        加法

-         减法

*         乘法

/         除法

%       取模(求余)

赋值运算符:

=          赋值

+=        加法赋值

-=         减法赋值

*=         乘法赋值

/=         除法赋值

%=       取模赋值

逻辑运算符

&&        逻辑与(AND)

||           逻辑或(OR)

!          逻辑非(NOT)

比较运算符:

==        等于

<=        小于等于

>=        大于等于

!=          不等于

<           小于

>           大于

位运算符:

&        按位与(AND)

|          按位或(OR)

^         按位异或(XOR)

<<       左移

>>       右移

其他:

&        取地址

*         指针运算符

++        自增

--          自减

按位清除运算符— &^

        将某些位上的位清零,即将指定位置上的位设置为0,用于处理二进制

        对于每个位,右侧的操作数对应位为0,则结果与左侧数相同

        对于每个位,右侧的操作数对应位为1,则结果被强制设置为0

package mainimport "fmt"func main() {a := 0b11001100b := 0b00110011result := a &^ bfmt.Printf("结果为:%08b\n", result)fmt.Println("结果为:", result)
}

4、函数

一个函数包含函数名、参数列表、返回值类型和函数体

如,写一个求和函数add

// 传入值为a,b都为int类型,返回也为int类型,该函数的返回值为a + b
func add(a int, b int) int {return a + b
}

函数可以有0个或多个参数,Go可以有0个、1个、多个返回结果

多个返回值

// 该函数有两个返回值,都为int类型
func moreresult(a int, b int) (int, int){// a , b 操作return int1, int2
}

命名返回值

// 命名返回值在函数中为局部变量,可以进行使用
func namefunc(width, heigh int) (area int){area = width * heighreturn
}
// 该函数返回为 area 值为 width * heigh

空返回语句

// 空返回
func moreresult(a int, b int) (x, y int){x = ay = breturn
}

按值传递

// 写一个函数,返回i累加
func incrementi(i int) {i++
}

5、条件语句

// 条件语句有两种:if语句和switch语句// if语句
if 条件{// 内容
} else if 条件 {// 内容
} else {// 内容
}// switch语句
switch 语句值 {case 值1:// 内容case 值2:// 内容...default:// 内容
}

相关文章:

Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程 1、为什么学习Go&#xff1f; 简单好记的关键词和语法&#xff1b;更高的效率&#xff1b;生态强大&#xff1b;语法检查严格&#xff0c;安全性高&#xff1b;严格的依赖管理&#xff0c; go mod 命令&#xff1b;强大的编译检查、严格的编码规范和完整的…...

STM32—FLASH闪存

1.FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程 我们怎么操作这些存储器呢&#xff1f;这就需要用到这个闪存存储器接口了&#xff0c;闪…...

AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线

1、了解FITAP与AC的建立过程 之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟&#xff0c;FAT哥哥能够直接独立使用当AP桥接、路由器等&#xff0c;而弟弟FIT则比较薄弱&#xff0c;独自发挥不出功效&#xff0c;需要一位师傅&#xff08;AC&#xff09;来带领&#xff0c…...

10 django管理系统 - 管理员管理 - 新建管理员(通过模态框和ajax实现)

在文章“04 django管理系统 - 部门管理 - 新增部门”中&#xff0c;我们通过传统的新增页面来实现部门的添加。 在本文中&#xff0c;我们通过模态框和ajax来实现管理员的新增。 首先在admin_list.html中新建入口&#xff0c;使用按钮 <div class"panel-heading&quo…...

Mysql中表字段VARCHAR(N)类型及长度的解释

本文将针对MySQL 中 varchar (N)类型字段的存储方式进行解释&#xff0c;主要是对字符和字节的关系的理解。 1. varchar (N) 中的 N varchar (N) 中的 N 表示字符数&#xff0c;而不是字节数。这意味着 N 表示你可以存储多少个字符。 字符数&#xff1a;指的是字符的个数&…...

git提交信息写错处理方式

在Git中&#xff0c;你可以通过使用rebase命令来合并提交记录。以下是一个简单的步骤来合并一系列提交&#xff1a; 使用git rebase -i开始交互式变基。在打开的编辑器中&#xff0c;你会看到一个提交列表。若要合并提交&#xff0c;将要合并的提交前面的pick改为squash或s。保…...

C#从零开始学习(用unity探索C#)(unity Lab1)

初次使用Unity 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp Unity的下载与安装 从 unity官网下载Unity Hub Unity的使用 安装后,注册账号,下载unity版本,然后创建3d项目 设置窗口界面布局 3D对象的创建 点击对象,然后点击Move Guzmo,就可以拖动…...

【SpringBoot】15 Echarts+Thymeleaf 绘制各种图表

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;IE8/9/10/11&#xff0c;Chrome&#xff0c;…...

网络学习笔记

一、网络的结构与功能 网络的鲁棒性与抗毁性 如果在移走少量节点后网络中的绝大部分节点仍然是连通的&#xff0c;那么就该网络的连通性对节点故障具有鲁棒性 网络上的动力学 动力系统&#xff1a;自旋、振子或混沌的同步、可激发系统 传播过程&#xff1a;信息传播与拥堵…...

[论文笔记]HERMES 3 TECHNICAL REPORT

引言 今天带来论文HERMES 3 TECHNICAL REPORT&#xff0c;这篇论文提出了一个强大的工具调用模型&#xff0c;包含了训练方案介绍。同时提出了一个函数调用标准。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 聊天模…...

MySQL-19.多表设计-一对多-外键

一.多表问题分析 二.添加外键 三.外键约束的问题...

MySQL程序介绍<一>

目录 MySQL程序简介 mysqld - MySQL 服务器 ​编辑 mysql - MySQL 命令⾏客⼾端 MySQL程序简介 1.MySQL安装完成通常会包含如下程序&#xff1a; Linux系统程序⼀般在 /usr/bin⽬录下&#xff0c;可以通过命令查看 windows系统⽬录&#xff1a; 你的安装路径\MySQL Server…...

Leetcode 第 419 场周赛题解

Leetcode 第 419 场周赛题解 Leetcode 第 419 场周赛题解题目1&#xff1a;3318. 计算子数组的 x-sum I思路代码复杂度分析 题目2&#xff1a;3319. 第 K 大的完美二叉子树的大小思路代码复杂度分析 题目3&#xff1a;思路代码复杂度分析 题目4&#xff1a;3321. 计算子数组的 …...

那些年 我们说走就走

那些年 我们说走就走 —— 2022-03-20 二月十八 春分 我总是钟情于原生景色&#xff0c;犹如那句 “落霞与孤鹜齐飞&#xff0c;秋水共长天一色。” 所绘。 我热爱骑行&#xff0c;向往自然&#xff0c;对有着 “中国人的景观大道” 之称的 318 国道川藏线憧憬已久。 17 年暑…...

MySQL初识

在了解什么是MySQL前&#xff0c;我们先了解一下什么是数据库&#xff1f;&#xff1f; 1. 数据库简介 1.1 什么是数据库 数据库是20世纪60年代末发展起来的⼀项重要技术&#xff0c;已经成为计算机科学与技术的⼀个重要分⽀。数据库技术主要是⽤来解决数据处理的⾮数值计算问…...

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…...

利用 OBS 推送 WEBRTC 流到 smart rtmpd

webrtc whip 推流 & whep 拉流简介 RFC 定义 通用的 webrtc 对于 SDP 协议的交换已经有对应的 RFC 草案出炉了。这就是 WHIP( push stream ) & WHEP ( pull stream ) . WHIP RFC Link: https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html WHEP RFC Link:…...

【python】极简教程3-函数

函数是将代码组织到可重用块中的一种方法。 函数调用 Python提供了许多内置函数,例如print: print(Hello, World!)函数调用通常包含函数名,后跟圆括号,括号内是参数列表。参数是传递给函数的数据,函数会基于这些数据执行操作。 数学函数 使用math函数前需要先导入mat…...

Python案例小练习——小计算器

文章目录 前言一、代码展示二、运行展示 前言 这是用python实现一个简单的计器。 一、代码展示 def calculate(num1, op, num2):if op "":return float(num1) float(num2)elif op "-":return float(num1) - float(num2)elif op "*":return…...

仓储数字化蓝图

1、仓储能力建设 2、仓储数字化建设...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...