Go 语言变量类型和声明详解

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测可视化 Grafana 版,10个用户账号 1个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在Go中,有不同的变量类型,例如:int 存储整数(整数),例如123或-123float32 存储浮点数字,带小数,例如19.99或-19.99string - 存储文本,例如“ Hello World”。字符串值用双引号括起来bool 存储具有两个状态的值:true或false

在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,关注后即可获取最新文章推送

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

相关文章
|
7天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
26 2
|
12天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
103 53
|
6天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
15 2
|
6天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
19 2
|
11天前
|
Ubuntu 编译器 Linux
go语言中SQLite3驱动安装
【11月更文挑战第2天】
34 7
|
11天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
42 5
|
10天前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
28 1
|
10天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
86 58
|
9天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
10天前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
27 9