Go 语言变量类型和声明详解
在Go中,有不同的变量类型,例如:
int存储整数(整数),例如123或-123float32存储浮点数字,带小数,例如19.99或-19.99string- 存储文本,例如“ Hello World”。字符串值用双引号括起来bool存储具有两个状态的值:true或false
声明(创建)变量
在Go中,有两种声明变量的方法:
使用var关键字:
使用var关键字,后跟变量名称和类型:
语法
var variablename type = value
注意:您始终必须指定type或value(或两者)。
使用:=符号
使用:=符号,后跟变量值:
语法
variablename := value
注意:在这种情况下,变量的类型是从值中推断的(这意味着编译器根据值决定变量的类型)。
注意:无法使用:=声明变量,而不将值分配给它。
具有初始值的变量声明
如果从一开始就知道变量的值,则可以在一行中声明变量并为其赋值:
示例
package main
import ("fmt")
func main() {
var student1 string = "John" //type is string
var student2 = "Jane" //type is inferred
x := 2 //type is inferred
fmt.Println(student1)
fmt.Println(student2)
fmt.Println(x)
}
注意:变量**student2和x的变量类型是从其值推断**的。
没有初始值的变量声明
在Go中,所有变量都已初始化。因此,如果声明变量而没有初始值,则其值将设置为其类型的默认值:
示例
package main
import ("fmt")
func main() {
var a string
var b int
var c bool
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
示例解释
在此示例中有3个变量:
abc
这些变量已声明,但未分配初始值。
通过运行代码,我们可以看到它们已经具有其各自类型的默认值:
a为""b为0c为false
声明后的值分配
可以在声明变量后将值分配给变量。这对于值最初未知的情况很有帮助。
示例
package main
import ("fmt")
func main() {
var student1 string
student1 = "John"
fmt.Println(student1)
}
注意:无法使用:=声明变量,而不将值分配给它。
var和 := 之间的区别
var和:=之间存在一些小差异:
var |
:= |
|---|---|
| 可以在函数内部和外部使用 | 仅可在函数内部使用 |
| 可以分别进行变量声明和值分配 | 变量声明和值分配不能分别进行(必须在同一行中完成) |
示例
此示例显示在函数外部使用var关键字声明变量:
package main
import ("fmt")
var a int
var b int = 2
var c = 3
func main() {
a = 1
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
示例
由于:=在函数外使用,因此运行程序会导致错误。
package main
import ("fmt")
a := 1
func main() {
fmt.Println(a)
}
结果:
./prog.go:5:1: syntax error: non-declaration statement outside function body
Go多变量声明
在Go中,可以在同一行中声明多个变量。
示例
此示例显示如何在同一行中声明多个变量:
package main
import ("fmt")
func main() {
var a, b, c, d int = 1, 3, 5, 7
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
注意: 如果使用type关键字,则每行只能声明一个类型的变量。
如果未指定type关键字,则可以在同一行中声明不同类型的变量:
示例
package main
import ("fmt")
func main() {
var a, b = 6, "Hello"
c, d := 7, "World!"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
在块中声明Go变量
多个变量声明也可以组合到块中以增加可读性:
示例
package main
import ("fmt")
func main() {
var (
a int
b int = 1
c string = "hello"
)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
Go变量命名规则
变量可以有简短的名称(如x和y)或更描述性的名称(age,price,carname等)。
Go变量命名规则:
- 变量名称必须以字母或下划线字符( _)开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(
a-z,A-Z,0-9和_) - 变量名称区分大小写(age,Age和AGE是三个不同的变量)
- 变量名称的长度没有限制
- 变量名称不能包含空格
- 变量名称不能是任何Go关键字
多字变量名称
具有多个单词的变量名称可能难以阅读。
有几种技术可用于使它们更易于阅读:
驼峰命名法
每个单词,除了第一个单词以外,都以大写字母开头:
myVariableName = "John"
帕斯卡命名法
每个单词以大写字母开头:
MyVariableName = "John"
蛇形命名法
每个单词之间用下划线字符分隔:
my_variable_name = "John"
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
Go 语言变量类型和声明详解的更多相关文章
- Go语言Slice作为函数参数详解
Go语言Slice作为函数参数详解 前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说. 个人认为上诉的结论不对,把引用类型看做对指针的封装,一般封装为结构体,结构体是值 ...
- 2.go语言入门----变量类型、声明变量、数组、切片
基本变量类型 介绍几种基本的变量类型:字符串.int.float.bool package main import ( "fmt" ) // 列举几种非常基本的数据类型 func ...
- 好用的wget命令从下载添加环境变量到各参数详解
本文是因为(笔者使用的windows系统)使用过好几次wget后,始终存在各种细节问题,于是下定决定细致的研究一下,并记录下其中细节. 下载与安装 第一步:下载wget,网络地址:http://dow ...
- js变量以及其作用域详解
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73 一.变量的类型 Javascript和Java.C这些语言不同 ...
- c语言变量类型联想
int float char *(指针) 已经定义:单个变量 单个相同类型在内存中顺序存放:数组 不同单个类型在内存中顺序存放:结构体 不同类型在内存中自由存放:链表 其中结构体与链表类型需运用时提前 ...
- shell编程变量介绍与表达式详解
shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell ...
- Go语言学习之6 反射详解
1.反射: 定义: 反射就是程序能够在运行时检查变量和值,求出它们的类型. 可以在运行时动态获取变量的相关信息 Import ( ...
- [51单片机] Keil C51中变量的使用方法详解
引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量 ...
- VMWare虚拟机的网络类型配置选择详解
VMWare虚拟机网络有三种类型,当然还有最后一种类型就是“不使用网络连接”,哈哈....... VMWare在安装会有让选择网络类型的选项,如果不确认使用那一种网络类型,也可以先随便选择一种网络类型 ...
- 条件变量pthread_cond_wait()和pthread_cond_signal()详解
条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起:另一个线程使"条件成立" ...
随机推荐
- Sourcetree 如何关联自己的gitlab仓库
现在有些企业自己搭建了gitlab服务器,通过sourcetree从企业服务器拉取代码的时候会提示认证失败.今天搞了大半天才搞懂,给我自己做个笔记. 添加账户 托管服务商 选择 GitLab CE 托 ...
- 【Azure APIM】验证APIM删除后的恢复步骤
问题描述 在Azure门户中,误删除API Management资源后,怎么办? 问题解答 遇见误删除的第一反应就是: 想恢复删除的内容,但是从门户上查看没有发现有可以操作的方面. (错误,Azure ...
- 【Azure 环境】中国区Azure是否可以根据资源组的模板,生成一个可视化的架构图呢?
问题描述 这是一个国际版链接(https://docs.microsoft.com/en-us/answers/questions/370410/how-to-generate-architectur ...
- 【对比】Gemini:听说GPT-4你小子挺厉害
前言 缘由 谷歌连放大招:Gemini Pro支持中文,Bard学会画画 事情起因: 一心只读圣贤书的狗哥,不经意间被新闻吸引.[谷歌最新人工智能模型Gemini Pro已在欧洲上市 将与ChatGP ...
- MapStruct的一些常规用法
每天坚持写一篇原创文章. 使用过MapStruct之后,再也没用过BeanCopy来复制对象了.确实是非常好用的工具库. MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处 ...
- C++ STL之 map 学习笔记
•何为 map? map 是 STL 的一个关联容器,它提供一对一的数据处理,map 中存放的是一个 key-value键值对,其类型可以自己定义: 第一个可以称为关键字,每个关键字在 map 中只能 ...
- 协议I2C
SCL SDA 同步,半双工 开漏+弱上拉,谁用这跟线,就下拉成低电平 想输出,去拉杆子或放手,操作杆子变化 想输入,直接放手,看电平高低就行 线与,一个低电平,全部低电平,可以利用这个执行多 ...
- ImageClipboard js粘贴剪切板图片,已测试,可用,可获得base64
ImageClipboard js粘贴剪切板图片,已测试,可用,可获得base64 具体用到自己项目的时候,拿源码改成自己的库,从写一遍 3个小问题 onpaste 执行了两遍,一次是图片加载完成,一 ...
- k8s安全之Network Policy
K8s Network Policy 是一种资源,它用于在 Pod 之间以及从其他网络实体到 Pod 的通信中进行网络级别的访问控制.它允许您定义一组规则,这些规则可以指定允许或拒绝网络流量. 具体来 ...
- 基于ADS1292芯片的解决方案之源码解析
接口解析 A 该芯片和主控使用的是SPI接口通信的. SPI接口一般有四根线,确保四根线准确连接是对的. B 该芯片可以有中断模式数据触发,所以,主控mcu需要有外部中断处理流程. //DRDY中断 ...