Go语言之路————go基本语法、数据类型、变量、常量、输出
Go语言之路————go基本语法、数据类型、变量、常量
- 前言
- 一、基本语法知识
- 二、数据类型
- 三、常量
- 四、变量
- 五、作用域
- 六、输入输出
前言
- 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程,如果你也是个小白或者转Go语言的,希望我这篇文章对你有所帮助。
- 有关go其他基础的内容的文章大家可以查看我的主页,接下来主要就是把这个系列更完,更完之后我会在每篇文章中挂上连接,方便大家跳转和复习。
一、基本语法知识
其实编程语言的语法在大框架上都是大差不差的,这就是为啥一个人熟练掌握了一门语言,他能迅速上手另一个语言,如果你是java的老手,那么你上手go就会特别快,go的很多知识点都能在java上找到相似的定义。
我们从一个简单的例子来看看go的语法。
package mainimport "fmt"func main() {fmt.Println("hello world")
}
我从下面几个要点去解析:
-
package
这是我们这个文件的包名,没错就是我们项目左侧目录,右键创建的direct目录名,但是main是个特殊的,这是我们整个程序的入口,你就理解为java中的@SpringBootAppliaction标注的main方法入口,我们的main方法一般都放在package main下。 -
import
引入的包名,这跟java中你import其他类差不多意思,如果当前go文件中我要用其他文件中的方法或者定义的字段,在本文件中的import中就要引入那个文件的包名,记住是包名,不是引入那个文件,也不是引入那个方法。- 如果我们引入多个,可以用括号包起来
import ("fmt""example" )
-
如果包名太长或者不顺眼,我们还可以起别名
import (aaa "fmt"bbb "example" )
起了别名后,那我们用的时候只需要用别名就好了,比如上面的输出函数我们可以换成这个:aaa.Println(“hello world”)
- func
这是go中声明一个方法的关键字,具体的我们后面讲到方法会讲,你只需要知道func main(),类似与java的void main()就行了
二、数据类型
go中的数据类型巨多,不像java中基本类型只有8个,它拆分的特别仔细,下面我会一一列出来,我会注明哪些是常用的,大家先关注常用的类型就行,心理有个印象。
-
bool
bool值基本还是所有语言通用的类型 描述 bool true为真值,false为假值 -
整型
类型 描述 uint8 无符号 8 位整型 uint16 无符号 16 位整型 uint32 无符号 32 位整型 uint64 无符号 64 位整型 int8 有符号 8 位整型 int16 有符号 16 位整型 int32 有符号 32 位整型 int64 有符号 64 位整型 uint 无符号整型 至少 32 位 int 整型 至少 32 位 uintptr 等价于无符号 64 位整型,但是专用于存放指针运算,用于存放死的指针地址。 整型中常用的就是int32和int64,当然还有uint8,其他的你知道有就行了,等要用的时候再看。
-
浮点型
类型 描述 float32 IEEE-754 32 位浮点数 float64 IEEE-754 64 位浮点数 常用的是float64
-
字符类型
类型 描述 byte 等价 uint8 可以表达 ANSCII 字符 rune 等价 int32 可以表达 Unicode 字符 string 字符串即字节序列,可以转换为[]byte类型即字节切片 都比较常用,rune用的稍微少一点。
-
其他类型术语
这里面列的大家看一下留个印象就好,后面的文章会一一详细讲解。类型 描述 数组 [5]int,长度为 5 的整型数组 切片 []int,整型切片,跟数组一个意思,只是可以动态扩容 映射表 map[string]int,键为字符串类型,值为整型的映射表,就是java的map 结构体 type Gopher struct{},Gopher 结构体,类似于java的类 指针 *int,一个整型指针。 接口 type Gopher interface{},Gopher 接口,类似于java的接口 通道 chan int,整型通道 -
nil
java中的null,只是一个变量,不能比较,不能用nil == nil
三、常量
用const关键字声明的就是常量
- 单独声明
const a = 1
const b = "2"
- 组合声明
const (c = 3d = "4"
)
直接输出一下看
func main() {fmt.Println(a, b, c, d)
}
输出内容:1 2 3 4
- iota
iota是一个内置的常量标识符,表示一个常量声明中的无类型整数序数从0开始,一般都是在括号中使用,它可以让下面的常量递增
const (Num = iotaNum1Num2Num3Num4
)func main() {fmt.Println(Num, Num1, Num2, Num3, Num4)
}
输出:0 1 2 3 4
正是有这个特性,所以我们可以用它来表示枚举,因为go中没有正式的enum声明的枚举字段。
四、变量
go中的变量用var关键字来声明,特别说明的是,go中大部分的变量或者参数这些的声明,都是变量名在前,类型在后的。
var a int
var b string
如果连续的变量的类型一样,那我们只需要在最后面声明一次类型就好
var a,b,c int
var d,e,f string
还可以用括号包起来
var (aa stringbb stringcc int
)
在开发中,还经常用值等:=(冒号等号)的方法赋值,就是不需要声明类型,让go自己去判断,这种就是简化了变量的定义
func main() {a1 := 1b1 := "2"fmt.Println(a1, b1) //输出1,2a1 = 3 //第二次赋值就不需要冒号了,因为前面已经声明过了fmt.Println(a1, b1) //输出3,2
}
五、作用域
作用域是对基本语法的扩展,我们再第一点中讲到了包的概念,这里说说包之间怎么引用
记住一点:如果我们声明的方法、变量想要本文件私有,那么我们就首字母小写,相反,如果我声明的方法其他文件也能用,那就首字母大写,首字母小写的类似与java中的private字段,只有本类才能访问
- 同包之下:新建一个package 叫 yu1,新建两个文件A.go和B.go,可以看到,我在B.go里面,不需要任何引用,直接就能调用a.go中的testA方法,也不需要大小写
package yu1import "fmt"func testA() {fmt.Println("a.go")
}
package yu1func testB() {testA()
}
- 不同包,新建一个package为yu2,新建一个文件c.go,在这时候,我如果在c中想引入yu1中a.go中的testA方法,记住必须要满足两个条件,请看我下面代码
package yu2import "newProject/yu1"func testC() {yu1.TestA()
}
相信大家也看出来了,这两个条件就是,import a.go文件的包名yu1,并且a.go中的方法首字母大写,用包名.方法名的方式去引用,这里是个重点,不是用a.go的文件,一定要用包名:包名.方法名,中间有个点,太小了大家别看不清
六、输入输出
go中最常用的输入输出就是fmt包,当然还有文件操作,这个后面我们在讲,本文先说说fmt包怎么格式化输出。
最简单的例子上面大家也看过了,直接用fmt.Println函数
fmt.Println("我是字符串")
fmt.Println(123)
fmt.Printf()格式化输出,那么go还是提供了挺丰富的api,下面我贴一个表,大家先看看,用的时候再来查就行了,记不住的多用几次就记住了。
格式化 | 描述 | 接收类型 |
---|---|---|
%% | 输出百分号% | 任意 |
%s | 输出string/[] byte值 | string,[] byte |
%q | 格式化字符串,输出的字符串两端有双引号"" | string,[] byte |
%d | 输出十进制整型值 | 整型 |
%f | 输出浮点数 | 浮点 |
%e | 输出科学计数法形式 ,也可以用于复数 | 浮点 |
%E | 与%e相同 | 浮点 |
%g | 根据实际情况判断输出%f或者%e,会去掉多余的 0 | 浮点 |
%b | 输出整型的二进制表现形式 | 数字 |
%#b | 输出二进制完整的表现形式 | 数字 |
%o | 输出整型的八进制表示 | 整型 |
%#o | 输出整型的完整八进制表示 | 整型 |
%x | 输出整型的小写十六进制表示 | 数字 |
%#x | 输出整型的完整小写十六进制表示 | 数字 |
%X | 输出整型的大写十六进制表示 | 数字 |
%#X | 输出整型的完整大写十六进制表示 | 数字 |
%v | 输出值原本的形式,多用于数据结构的输出 | 任意 |
%+v | 输出结构体时将加上字段名 | 任意 |
%#v | 输出完整 Go 语法格式的值 | 任意 |
%t | 输出布尔值 | 布尔 |
%T | 输出值对应的 Go 语言类型值 | 任意 |
%c | 输出 Unicode 码对应的字符 | int32 |
%U | 输出字符对应的 Unicode 码 | rune,byte |
%p | 输出指针所指向的地址 | 指针 |
相关文章:
Go语言之路————go基本语法、数据类型、变量、常量、输出
Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触G…...

音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息
音视频入门基础:MPEG2-PS专题系列文章: 音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载 音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件 音视频入门基础…...

Docker安装和卸载(centos)
Docker安装和卸载 一,已安装Docker,卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 如果出现以下提示就证明没卸载…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…...

Winforms开发基础之非主线程操作UI控件的误区
前言 想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢࿱…...
Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...
springcloudalibaba集成fegin报错ClassNotFoundException解决方案
集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...
力扣264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法:L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...
计算机网络之---TCP连接管理
TCP连接管理 TCP(传输控制协议)是面向连接的协议,在数据传输之前需要建立连接,在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则,分别称为三次握手(Three-Way Handshake)和四…...
《CPython Internals》阅读笔记:p118-p150
《CPython Internals》学习第 8 天,p118-p150 总结,总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
常见7种排序算法 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)快速排序(…...

三只松鼠携手爱零食,社区零售新高峰拔地而起
合纵连横,这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改,到社区零售正在进行的渠道变革,竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此,有杀伐,有并购,刀光…...

Java聊天小程序
拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...

Kibana操作ES基础
废话少说,开干!!!!!!!!!!!!截图更清晰,复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
本文所用——MYSQL版本:8.0.25 baidu都是直接创建新用户并赋权,如下: GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行,会报错! 经查阅资料发现——MY…...

动漫周边商城系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...
Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响
Vue 3 的 Diff 算法会受到 v-for 循环中的 key 属性的影响,key 的选择直接关系到 Diff 算法的效率和最终的 DOM 更新结果。 key 的作用 在 Vue 中,key 是一种标识,它用于唯一标记每个虚拟 DOM 节点。Diff 算法会根据 key 判断新旧节点是否是…...

江科大STM32入门——看门狗笔记整理
wx:嵌入式工程师成长日记 (一)简介 WDG(Watchdog)看门狗看门狗可以监控程序的运行状态,当程序因为设计漏洞(无法预料)、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及…...

【计算机网络】lab7 TCP协议
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...