在Go中,有不同的变量类型,例如:

  • int 存储整数(整数),例如123或-123
  • float32 存储浮点数字,带小数,例如19.99或-19.99
  • string - 存储文本,例如“ Hello World”。字符串值用双引号括起来
  • bool 存储具有两个状态的值:true或false

声明(创建)变量

在Go中,有两种声明变量的方法:

使用var关键字:

使用var关键字,后跟变量名称和类型:

语法

var variablename type = value

注意:您始终必须指定typevalue(或两者)。

使用:=符号

使用:=符号,后跟变量值:

语法

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)
}

注意:变量**student2x的变量类型是从其值推断**的。

没有初始值的变量声明

在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个变量:

  • a
  • b
  • c

这些变量已声明,但未分配初始值。

通过运行代码,我们可以看到它们已经具有其各自类型的默认值:

  • a""
  • b0
  • cfalse

声明后的值分配

可以在声明变量后将值分配给变量。这对于值最初未知的情况很有帮助。

示例

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-Z0-9_
  • 变量名称区分大小写(age,Age和AGE是三个不同的变量)
  • 变量名称的长度没有限制
  • 变量名称不能包含空格
  • 变量名称不能是任何Go关键字

多字变量名称

具有多个单词的变量名称可能难以阅读。

有几种技术可用于使它们更易于阅读:

驼峰命名法

每个单词,除了第一个单词以外,都以大写字母开头:

myVariableName = "John"

帕斯卡命名法

每个单词以大写字母开头:

MyVariableName = "John"

蛇形命名法

每个单词之间用下划线字符分隔:

my_variable_name = "John"

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Go 语言变量类型和声明详解的更多相关文章

  1. Go语言Slice作为函数参数详解

    Go语言Slice作为函数参数详解 前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说. 个人认为上诉的结论不对,把引用类型看做对指针的封装,一般封装为结构体,结构体是值 ...

  2. 2.go语言入门----变量类型、声明变量、数组、切片

    基本变量类型 介绍几种基本的变量类型:字符串.int.float.bool package main import ( "fmt" ) // 列举几种非常基本的数据类型 func ...

  3. 好用的wget命令从下载添加环境变量到各参数详解

    本文是因为(笔者使用的windows系统)使用过好几次wget后,始终存在各种细节问题,于是下定决定细致的研究一下,并记录下其中细节. 下载与安装 第一步:下载wget,网络地址:http://dow ...

  4. js变量以及其作用域详解

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73   一.变量的类型  Javascript和Java.C这些语言不同 ...

  5. c语言变量类型联想

    int float char *(指针) 已经定义:单个变量 单个相同类型在内存中顺序存放:数组 不同单个类型在内存中顺序存放:结构体 不同类型在内存中自由存放:链表 其中结构体与链表类型需运用时提前 ...

  6. shell编程变量介绍与表达式详解

    shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell ...

  7. Go语言学习之6 反射详解

    1.反射: 定义: 反射就是程序能够在运行时检查变量和值,求出它们的类型.                   可以在运行时动态获取变量的相关信息                   Import ( ...

  8. [51单片机] Keil C51中变量的使用方法详解

    引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量 ...

  9. VMWare虚拟机的网络类型配置选择详解

    VMWare虚拟机网络有三种类型,当然还有最后一种类型就是“不使用网络连接”,哈哈....... VMWare在安装会有让选择网络类型的选项,如果不确认使用那一种网络类型,也可以先随便选择一种网络类型 ...

  10. 条件变量pthread_cond_wait()和pthread_cond_signal()详解

    条件变量        条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起:另一个线程使"条件成立" ...

随机推荐

  1. 第一百一十八篇: JavaScript 原型链式继承

    好家伙,好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记 1.原型链 原型链是JS实现"继承"的方案之一 ECMA-262 ...

  2. Centos系统下,各种服务重启

    1.sudo systemctl start firewalld 2../redis-server  /usr/local/bin/redis.conf 3.mongod -f /etc/mongod ...

  3. [C++] 代码注入非dll版

    目录 前言 需要注意的问题 DLL注入和代码注入区别 代码 解决问题过程 参考 前言 昨天完成了dll注入,今天就完成了代码注入,早知道这个,就应该早点这么做. 需要注意的问题 64位程序只能注入64 ...

  4. centos7挂载硬盘(大于2T)

    配置方法: 1.root账户下,执行 fdisk -l 命令查看挂载的硬盘设备,假设设备号为/dev/sdb,接下来我们使用parted命令来进行GPT分区 2.使用parted命令进行GPT分区 # ...

  5. 深入解析:AntSK 0.1.7版本的技术革新与多模型管理策略

    在信息技术快速迭代的当下,.Net生态中的AntSK项目凭借其前沿的AI知识库和智能体技术,已经吸引了广大开发者的关注和参与.今天,我要给大家介绍的主角,AntSK 0.1.7版本,无疑将是这个开源项 ...

  6. mockjs 前端写完 给后台调 mock.js | 改到2.0版本

    需求:最近活太忙了,实在是联调没有时间了,无奈又拾起来mockjs 1 安装mockjs npm install mockjs // 这是个只在开发的时候用,打包后就没有了,业务更安全 npm ins ...

  7. iptables五表五链及对应实例

    iptables是Linux系统上用于配置网络包过滤规则的工具,它使用表(tables)和链(chains)来组织规则.以下是iptables中的五表五链及其对应的实例说明: 五表 filter表:默 ...

  8. python 判断bytes是否相等的几种方法

    一 前言: python判断bytes是否相等,一般要用到这几种方法:is,==,operator.下面做几个例子让大家看一下. 二 正文: 1 相等方法: test1=b'0xab' test2=b ...

  9. Leetcode 招商银行-03. 点燃木棒

    用广度优先,暴力搜索.代码如下 import java.util.*; class Solution { public static void main(String[] args) { Soluti ...

  10. 三维模型3DTile格式轻量化压缩模型变形浅析

    三维模型3DTile格式轻量化压缩模型变形浅析 在对三维模型进行轻量化压缩处理的过程中,常常会出现模型变形的现象.这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素.以下将对此现象进行详细分析 ...