Go全栈学习(一)基础语法
Go语言基础语法
文章目录
- Go语言基础语法
- 注释
- 变量
- 变量的定义
- 变量的交换
- 理解变量(内存地址)
- 匿名变量
- 变量的作用域
- 常量
- 2023.2.4日 总结
// 关于Goland 中 执行的问题
// 1、包下执行 (一个 main 函数来执行,如果有多个,无法直接执行)
// 2、Go文件执行 (直接启动即可,在main函数外面执行)
注释
我们为什么写注释?
一个项目,是很多组成的。写的时候,你能看懂的。 半年、一年 (时间久了,自己写代码看不懂了)
对接、项目很多时候都是多人协作完成。(很难沟通,直接读懂代码是比较困难)
在刚开始学习的时候,不喜欢写注释。
什么是注释: 来描述我当前这个代码是做什么的,或者一些批注
package mainimport "fmt"// 注释是不会被程序执行的// // 单行注释
// 注释主要是针对一些自己不太理解的业务,或者复杂的业务。开源项目中,注释十分完善。/* 多行注释
。。。。。。
写自己的理解和当前代码作用
*/
func main() {fmt.Println("Hello,World!")}
以helloworld为例:
// 代表是main包,下面如果存在 main 函数,那么就是程序的入口
package main// 导入了一个 fmt 包,可以通过它来调用打印函数、输出一行话....
import "fmt"// main函数 func 函数 main 函数的名字 () 没有参数
func main() {// 打印了一句helloworldfmt.Println("Hello,World!")}
写注释是一个十分良好的习惯,我们都应该按照要求给自己代码写好注释,为了自己,也为了他人。很多大公司里也是对注释有严格要求的。
变量
变量的定义
程序 : 我们向电脑说了一段话,需要电脑才能理解 (沟通机制 ,xxx语言 – 汇编 – 机器码)
电脑实际上识别的是机器码 : 0 1 1 1 0 1 (高低电频)
机器码 : 穿孔纸带
汇编:早些时候,现在的很多机器硬件底层代码,都是汇编
人能读懂的代码:英文、中文
将我们的语言和机器进行对接 (C、Java、Go —> 编译器 --> 计算机中去执行:无需理解的,我们只需要写我们能看懂的代码即可 )
我们理解的世界、和计算机的世界要一一对应:
定义:一切都是需要去定义的。
计算机也需要去定义一些东西。
人名: 名字 name = 秦疆 字符串。
名字(变量)
name = 张三
name = 李四
计算机也需要这样来认识我们写的代码,也需要一个格式
通过 var 关键字来定义变量
变量名字 需要告诉计算机这个信息(变量)是什么类型的,数据类型:数字、字符串、小数… = “变量的值”
//用程序描述一个人的信息
// string 字符串类型
var name string = "秦疆"
// int 数字类型
var age int = 27var sex string = "男"// Java
String name = "秦疆"
**公式:定义变量 var 变量名 变量类型 **
package mainimport "fmt"func main() {// var 变量名 变量类型// 定义变量 ,如果没有给这个变量赋值, 就是这个数据类型的默认值。// string 默认值 ”“ int 默认值 0var name stringvar age int// 可以同时定义多个变量,也只需要使用 var() 关键字var (addr stringphone int)// goland 快捷键 : 复制当前行到下一行 Ctrl + Dfmt.Println(name)fmt.Println(age)fmt.Println(addr)fmt.Println(phone)// 变量的使用,在定义完毕变量之后直接可以操作这个变量// 给变量赋值 ,符号 = 赋值(不能叫等于)// 将 "秦疆" 赋值 给 name 这个变量。name = "秦疆"// 使用变量,直接打印或者进行一些操作都可以fmt.Println(name)// 变量是可以被重复赋值的,变量。name = "张三"fmt.Println(name)// 在定义变量的时候直接进行赋值。var dog string = "旺财"fmt.Println(dog)}
短变量的申明方式(语法糖,方便开发人员开发)
package mainimport "fmt"func main() {// 只定义变量,不使用可以吗. 理论可以,实际在Go语言中不行。// 无意义代码,报错!// 问题1 :能不能不写数据类型// 问题2 :不用var 直接定义变量呢?// 自动推导,一个短变量声明name := "kuangshen"age := 18// 语法糖(偷懒,简化开发!)// := 相当于快递定义变量。如果给这个变量赋值了,那么会自动推导它的类型// var 、 数据类型的定义都被省略的。// 数据类型 go语言中基本的数据类型。fmt.Println(name)fmt.Println(age)// 定义了变量name2var name2 string// 在快速声明中,如果 := 左边的变量已经存在了,那么它将无法创建,无法重新定义name3 := "qinjiang222"fmt.Println(name2)fmt.Println(name3)name3 = "zhangsan666"
}
小结
1、定义变量使用定式 var 变量名称 变量数据类型
2、给变量赋值 。 定义的时候直接赋值、 通过变量名来赋值、
3、语法糖 := 。 可以通过它来快速定义变量,如果是基本数据类型,字符串、数字,它会自动推导类型
所谓的基础语法,所有的编程语言大同小异。
变量的交换
package mainimport "fmt"func main() {/* 在编程中遇到的第一个问题:变量交换var a int = 100var b int = 200var t intt = aa = bb = t*/// 在Go语言中,程序变量交换,也有语法糖var a int = 100var b int = 200// fmt.Println 可以传递多个参数,用逗号隔开,直接打印fmt.Println("a=", a, ",b=", b)// 把a,b赋值给b,a 语法糖, 底层本质还是用到了临时变量。简化我们的开发b, a = a, bfmt.Println("交换后 a=", a, ",b=", b)// 复杂的问题都给我们简单化了,我们开发很轻松,编译器帮我们在底层处理。
}
理解变量(内存地址)
package mainimport "fmt"func main() {// 变量到底是个什么玩意?// num 实际上是一片内存空间// 我们想要看一个变量的内存地址,只需要在变量名前加上 & 即可。// 取地址符 (指针)var num intnum = 1000// 思考:这个num在计算机中是什么样子的。 numfmt.Printf("num的值:%d,内存地址:%p\n", num, &num)num = 2000fmt.Printf("num的值:%d,内存地址:%p\n", num, &num)// 汇编。理解一切var name stringname = "张三"// 思考:这个num在计算机中是什么样子的。 numfmt.Printf("num的值:%s,内存地址:%p\n", name, &name)name = "李四"fmt.Printf("num的值:%s,内存地址:%p\n", name, &name)// 打印内存地址的方式之一。 Print f格式化输出// 内存// 第一个参数 输出字符串// % 占位符。// 占位符的数量,要和后面待输出的数量一直// %d 数字 int d// %p 内存地址,num需要取出变量的地址。// %s 字符串。// \n 换行//fmt.Printf("num的值:%d",num)
}
num = 0xaaaaaaaa
更多关于汇编和二级制以及计算机底层内存本质的科普看我往期视频 : https://www.bilibili.com/video/BV1ni4y1G7B9
匿名变量
package mainimport "fmt"// 变量 ( 有名字、没有名字:匿名 )
// 十分特殊、匿名变量 (黑洞,一切东西丢进去,任何赋值给匿名变量的值都会被丢弃)
// _ 下划线,就是匿名变量在Go语言中// 函数 一段代码的集合。
//
// func test 函数名 (参数,参数....) 返回一些东西{
// 一段代码的集合,通过or不通过参数,返回结果
// }
//
// 基本的操作函数,调用函数,返回两个数字。
func test() (int, int) {// return 返回结果return 100, 200
}// 在Go语言中会大量使用到
// 匿名变量不占用内存空间,不会分配内存。
func main() {// 调用这个test函数,应该会返回两个结果,100,200// 变量 : 除了直接定义之外,还可以是一个结果的赋值//var a int = 100// 只想要test返回的第一个结果,这时候就需要使用匿名变量 _。a, _ := test() // a,b := 100,200fmt.Println(a)// 只想要test返回的第二个结果,这时候就需要使用匿名变量 _。_, b := test()fmt.Println(b)
}
变量的作用域
package mainimport "fmt"// 全局变量:在当前go文件中生效...
// 定义在go文件非函数内,在package和import下面
// 全局变量的定义必须使用 var 关键字, 如果直接使用 := 则无法创建该变量
// 全局变量和局部变量是可以重名的,优先级。到底用谁
var c intfunc main() {// 局部变量:只在一定的范围内生效...// 在函数体内声明变量var a int = 3var b int = 4// 如果全局变量有,那么直接使用全局变量来接收。c = a + bfmt.Printf("a=%d,b=%d,c=%d\n", a, b, c)fmt.Printf("c内存地址:%p\n", &c)b = 1// 但是如果在局部有和全局同名的变量,优先使用局部变量c := a + bfmt.Printf("a=%d,b=%d,c=%d\n", a, b, c)fmt.Printf("c内存地址:%p\n", &c)b = 5// 就近原则c = a + bfmt.Printf("a=%d,b=%d,c=%d\n", a, b, c)fmt.Printf("c内存地址:%p\n", &c)// Printf 格式化输出 (参数一:需要打印的内容,%是占位符,通过后续参数给他一一赋值)fmt.Printf("a=%d,b=%d,c=%d\n", a, b, c)
}
就近原则
package mainimport "fmt"// Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。
// string int float64 浮点数(小数)
var a float64 = 3.14func main() {var a float64 = 2.18fmt.Println(a)
}
常量
常量: 不能变化的量。 这个变量是一个特殊的变量,无法改变的。 关键字 const
两个区别:变量的定义使用 var 、常量的定义是使用const
是什么机制导致他无法改变的?
Go语言底层的约定,实际上它是可以改变的,需要跳过常量名,直接找到内存地址,进行修改值。
package mainimport "fmt"// 常量和变量放置的内存地址不同 (栈、堆、常量池)
// 程序正常执行,压栈// 常量
func main() {// 规定:建议这么去做// 我们通过定义常量的时候,建议大家使用大写字母来定义。区分与普通变量// 一旦定义之后是不会发生变化的。// 定义格式 const 常量名[type] = valueconst URL string = "www.kuangstudy.com"// 隐式定义 常量的自动推导是可以省略一些基础类型,const URL2 = "www.baidu.com"// 可以同时定义多个常量const URL3, URL4 string = "www.kuangstudy.com", "www.baidu.com"//fmt.Println(URL)fmt.Println(URL2)fmt.Println(URL3)fmt.Println(URL4)// 在我们真实的世界也是有很多不会发生变化量,那在程序中对应的就是常量const PI = 3.14// 固定的东西,都建议统一定义成常量。const LENGTH int = 8000const WIDTH int = 8000// 常量是无法被修改的。//LENGTH = 13fmt.Println(LENGTH)}
2023.2.4日 总结
1、注释,给自己看也给别人看,良好习惯
2、变量的定义 var 变量名 变量类型
3、变量的赋值 变量 = 变量值
4、变量定义的语法糖 := ,只能用在变量中,可以自动推导基本数据类型、只能用在局部变量中
5、变量的本质- 内存空间
6、匿名变量 _
7、变量的作用域 :全局变量、局部变量 (同名-就近原则)
8、常量的定义和场景 (const)无法修改的值才会设置为常量,方便使用,通常使用大写
作业:
1、定义变量,然后画出内存图来理解什么是变量
2、尝试使用 := 定义5-10个变量来体验
3、如果是其他语言过来的人 , 定义变量尝试多理解和习惯 (有其他经验的人)
4、变量作用域的就近原则测试
5、匿名变量体验测试 (在后面开发中大量用到)
6、找寻生活中的10个常量数值,用程序定义并打印出来
7、尝试学会使用 printf 函数。
拓展:不建议大家做的,有想法的人去做
1、计算机的基本执行汇编原理
2、程序运行中的栈堆
https://www.bilibili.com/video/BV1ni4y1G7B9
量的赋值 变量 = 变量值
4、变量定义的语法糖 := ,只能用在变量中,可以自动推导基本数据类型、只能用在局部变量中
5、变量的本质- 内存空间
6、匿名变量 _
7、变量的作用域 :全局变量、局部变量 (同名-就近原则)
8、常量的定义和场景 (const)无法修改的值才会设置为常量,方便使用,通常使用大写
作业:
1、定义变量,然后画出内存图来理解什么是变量
2、尝试使用 := 定义5-10个变量来体验
3、如果是其他语言过来的人 , 定义变量尝试多理解和习惯 (有其他经验的人)
4、变量作用域的就近原则测试
5、匿名变量体验测试 (在后面开发中大量用到)
6、找寻生活中的10个常量数值,用程序定义并打印出来
7、尝试学会使用 printf 函数。
拓展:不建议大家做的,有想法的人去做
1、计算机的基本执行汇编原理
2、程序运行中的栈堆
https://www.bilibili.com/video/BV1ni4y1G7B9
相关文章:

Go全栈学习(一)基础语法
Go语言基础语法 文章目录Go语言基础语法注释变量变量的定义变量的交换理解变量(内存地址)匿名变量变量的作用域常量2023.2.4日 总结// 关于Goland 中 执行的问题// 1、包下执行 (一个 main 函数来执行,如果有多个,无法…...

centos7搭建svn配置
基本概述 Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。…...
趣味三角——第12章——tanx
第12章节 tanx In his very numerous memoires, and especially in his great work, Introductio in analysin infinitorum (1748), Euler displayed the most wonderful skill in obtaining a rich harvest of results of great interest. . . . Hardly any other work …...

Java - 数据结构,栈
一、栈 1.1、什么是栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压…...

某餐厅系统网络故障分析案例
背景 针对食堂经营企业,某堂食软件为客户提供优化堂食就餐流程、提高食堂服务水平和管理效率。 某上海客户使用该堂食系统,在就餐高峰时段,总是出现支付、点餐等操作缓慢,动辄一个操作需要等待几十秒。该客户联系软件厂商&#…...

华为OD机试题,用 Java 解【密室逃生游戏】问题
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

如何重命名SQL Server数据库
重命名SQL Server数据库 使用T-SQL重命名SQL Server数据库使用分离和附加重命名SQL Server数据库使用T-SQL查询分离和重新连接在SSMS中分离和重新连接通过SSMS重命名SQL Server数据库当使用SQL数据库很长一段时间时,你可能会遇到需要为数据库命名的情况。它可以用几种不同的方…...

联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?
联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?有用户电脑正常开机之后,出现了屏幕变成绿屏,无法进行操作的情况。这个问题是系统出现了问题,那么如何去进行问题的解决呢?接下来我们一起来分享看看如何使用U盘重装电脑…...

车载开发知识交流【学习路线】
前言 在2023国内百废待兴;经济复苏的号召一直在响应,这对于压抑了三年的人民来说无疑是福音。这篇我们主要说一下拉动经济的其中大板块——车企;我们知道我们最大的经济除了房地产,第二就是车企。而在造车领域中也不断的加入了许…...

【读书笔记】《深入浅出数据分析》第二章 检验你的理论
文章目录一,相关分析方法1,相关系数二,相关性不等于因果关系三,证明因果关系,“控制变量法”?本章主要说明了两个问题: 1,相关性不等于因果关系 2,如何判断两种数据之间是相关性&am…...

pyflink学习笔记(一):table_apisql
具体定义请参考官方文档:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/overview/本文主要针对实际使用中比较常用的api进行整理,大多数例子都是官网,如有歧义可与官方对照。一、 创建 TableEnvironmentTab…...

GCC 编译器套件说明
写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录GCC 简述GCC 主要…...

IDEA集成Git
1:IDEA集合Git1.1:配置Git忽略文件-IDEA特定文件问题 1:为什么要忽略他们?答: 与项目的实际功能无关, 不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。问题 2:怎么忽略?1&a…...

算法流程图
里程计定位: 优:定位信息连续,无离散的跳跃 缺:存在累计误差,不利于长距或长期定位 传感器定位: 优:比里程计定位更精准 缺:会出现跳变情况,且传感器定位在标志物较少的环…...

Java中安装JDK环境–javac命令无效
Java中安装JDK环境–javac命令无效 一,安装JDK1.8 阿里云盘地址推荐 我们可以选择安装地址,这个地址是我们用来配置环境变量的,唯一注意的是这个,其他的都是默认下一步。直至安装完成,jdk下载地址https://www.oracl…...

递推问题
递推:在面对一个大任务的时候,有时候我们可以将大任务划分为小任务,再将小任务划分为更小的任务......,直到遇到初始情况,最后由初始情况一直往前推进,最后解决大任务,这就是递推的思想。递推问…...

js中强制类型转换Number、parseInt、parseFloat、Boolean、String、toString的使用
文章目录一、Number() 转换为整数二、Number.parseInt() 将字符串转换为整数三、Number.parseFloat() 将字符串转换为浮点数四、Boolean() 转换为布尔值五、String() 转换为字符串六、.toString() 转换为字符串最近在巩固 js 的基础知识,今天复习到了 js 中的数据类…...

漏斗分析法
一什么是漏斗分析? 漏斗分析是数据领域最常见的一种“程式化”数据分析方法,它能够科学地评估一种业务过程,从起点到终点,各个阶段的转化情况。通过可以量化的数据分析,帮助业务找到有问题的业务环节,并进…...

pycharm入门快捷操作(部分)
altenter:提示意图动作shift两次或者crtlshifta:查找框(查找动作、类、项目等)crtlw:一次一个字符、两次整个字符串(if条件下选择整个判断体)、三次整个句子、四次整个引用ctrlshiftw࿱…...

宣布 Databricks 支持 Amazon Graviton2,性价比提高3倍
今天,我们很高兴地宣布 Databricks 对基于 Amazon Graviton2 的亚马逊弹性计算云(Amazon EC2)实例的支持的公开预览。Graviton 处理器由亚马逊云科技进行定制设计和优化,为运行在 Amazon EC2 上的云工作负载提供最佳性价比。当与高…...

18_FreeRTOS任务通知
目录 任务通知的简介 任务通知值的更新方式 任务通知的优势 任务通知的劣势 任务通知值和通知状态 发送通知相关API函数 接收通知相关API函数 任务通知模拟信号量实验 任务通知模拟消息邮箱实验 任务通知模拟事件标志组实验 任务通知的简介 任务通知:用来通知任务的…...

【华为OD机试模拟题】用 C++ 实现 - 整理扑克牌(2023.Q1)
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

mysql lesson1
常用命令 1:exit 退出mysql 2:uroot pENTER键,再输入密码,不被别人看见 3:完美卸载:双击安装包,手动删除program file中的mysql,手动删除Programedate里的mysql 4:use mysql 使用数据库 5:…...

联想笔记本无法下载 Lenovo Vantage
状况 在 Microsoft Store 下载时发生错误,可能是如下代码:0x80070005, 0x80073D05, or 0x80070017. 解决方法 1.在“开始”菜单搜索栏中输入PowerShell 2.当Windows PowerShell出现在“开始”菜单中,右键点击此图标,然后选择以…...

功能性材料深入超级赛道,赋能多行业迭代升级
中国国际胶粘剂及密封剂展览会深耕胶粘剂、密封剂和胶粘带行业26年,是行业认可的、优质的贸易与技术交流平台。展会连接了十几个行业的买家和卖家,包括汽车、电子、新能源、轨道交通、工业等重要领域,为客户提供封装、粘合、散热、装配制造等…...

【项目精选】jsp企业快信系统(论文+视频+源码)
点击下载源码 计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心。到了今天,互联网已经成为了大量应用的首选平台,人们已经渐渐习惯了网络交易,渐渐对网络…...

通信算法之112:载波同步及comm.CarrierSynchronizer
1. 2. 载波同步是基于锁相环技术使本地获取和载波同频同相的参考信号,用来解调信号。载波同步就是对本地参考信号进行频率和相位偏差的补偿,进而实现本地参考信号和载波信号同频同相。 载波同步只适用于单载波调制系统,载波同步算法对于BPSK、…...

【C. Build Permutation】(整数理论、构造、思维)
链接 理论基础 结论:在区间[n,2n]上,至少存在一个完全平方数。结论:在区间[n,2n]上,至少存在一个完全平方数。结论:在区间[n,2n]上,至少存在一个完全平方数。 构造⌈n⌉2构造\lceil \sqrt{n}\rceil^2构造⌈…...

前端面试题:事件循环(Eventloop)
什么是事件循环?如何理解事件循环?事件循环原理如何描述?事件循环涉及了很多知识点,想要彻底掌握JS事件循环原理必须要掌握以下知识点:同步任务、异步任务、宏任务、微任务、任务队列、执行栈、js运行机制、EventLoop。 1.事件循…...

jmeter接口自动化测试框架
接口测试可以分为两部分: 一是线上接口(生产环境)自动化测试,需要自动定时执行,每5分钟自动执行一次,相当于每5分钟就检查一遍线上的接口是否正常,有异常能够及时发现,不至于影响用…...