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

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&#xff1…...

宣布 Databricks 支持 Amazon Graviton2,性价比提高3倍

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

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...