Go变量和数据类型简介

如果您想用 Go 编程语言编程,您需要学习变量和数据类型的工作原理。轻而易举:从这里开始。

译自Golang Variables and Data Types: An Introduction,作者 Jack Wallen。

既然你已经尝鲜了Go 语言的工作原理,现在我们退一步来讨论变量和数据类型。如果你曾经使用过任何其他编程语言,你应该已经熟悉这些概念。但是,如果Go是你的第一门语言,那么理解变量和数据类型的目的以及它们如何发挥作用非常重要。

如果不了解变量和数据类型,你将很难快速掌握 Go(或任何语言)。但别担心,变量和数据类型都不是复杂的概念。事实上,变量非常简单。至于数据类型,你只需要知道类型及其工作原理即可。

变量

一个典型的变量以键值对的形式工作,如下所示:

非常简单。

在 Go 中,你可以声明一个变量,定义它的数据类型,然后给它一个值。语法如下所示:

csharp 复制代码
var variableName dataType

我们用var声明变量,用_变量名_给变量命名,用_数据类型_定义数据类型。假设我们正在为名字创建一个变量

我们所做的是声明一个名为_fname_(表示名字)的变量,类型为字符串。我们使用字符串,因为名字将由字符 a/A-z/Z 组成(稍后详细介绍数据类型)。

我们还可以在同一行中用一个值初始化该变量(如果我们愿意),如下所示:

让我们在一段代码块中使用它,同时为姓氏也创建一个变量。请记住(从我们之前的教程中),我们必须使用以下命令调用主包:

接下来,我们必须使用以下行从 main 中导入"fmt":

现在,我们将创建一个函数来定义我们的变量并打印名字和姓氏。该函数如下所示:

csharp 复制代码
func main() {
    var fname string = "New"
    var lname string = "Stack"
    fmt.Println(fname,lname)
}

我们的整个应用程序(名为 vars.go)如下所示:

go 复制代码
package main

import ("fmt")

func main() {
    var fname string = "New"
    var lname string = "Stack"
    fmt.Println(fname,lname)
}

我们使用以下命令运行应用程序:

输出将是:

sql 复制代码
New Stack

简单有效。

但是,如何使用用户输入的数据初始化变量?这是一个很酷的技巧。我们将坚持上面的示例。为此,我们将使用_fmt.Scan_函数从主包中。在调用_main_和_fmt_之后,我们首先要做的(在我们的函数中)是用以下命令声明我们的变量:

csharp 复制代码
var fname string
var lname string

接下来,我们写四行代码:

  1. 指示用户输入他们的名字。
  2. 接受名字的输入。
  3. 指示用户输入他们的姓氏。
  4. 接受姓氏的输入。

此部分如下所示:

scss 复制代码
fmt.Println("Enter your first name:")
fmt.Scan(&fname)
fmt.Println("Enter your last name:")
fmt.Scan(&lname)

最后,我们写一行来打印所有内容,如下所示:

arduino 复制代码
fmt.Println("Your name is:", fname, lname)

整个代码如下所示:

go 复制代码
package main

import ("fmt")

func main() {
    var fname string
    var lname string
    fmt.Println("Enter your first name:")
    fmt.Scan(&fname)
    fmt.Println("Enter your last name:")
    fmt.Scan(&lname)
    fmt.Println("Your name is:", fname, lname)
}

当你运行应用程序时,它会询问名字,然后询问姓氏,并打印出这两个名字。

数据类型

Go 有许多包含的数据类型,分为三类:

  • 基本类型(bool、int、float64、complex128、string)
  • 聚合类型(数组、切片、结构)
  • 引用类型(指针、通道、映射、接口)

基本类型很明显,定义如下:

  • var boolean bool = true
  • var integer int = 100
  • var float float64 = 100.09
  • var comp complex128 = 1 + 3i
  • var st string = "New Stack"

它们分解如下:

  • 布尔值为 true/false
  • int 是一个整数
  • float64 是一个小数
  • complext128 是所有复数的集合,具有浮点数和虚数分量
  • string 是一个字符串

接下来,我们有聚合类型,它可以采用以下形式:

  • someArray := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
  • var slice []int = someArray[0:5]

结构聚合类型有点复杂,因为它可以包含自定义字段。你像这样声明一个结构:

go 复制代码
type Box struct {
    X int
    Y int
}

然后你可以像这样初始化这些值:

最后,还有引用类型,例如指针,它包含它们所基于的变量的内存地址。指针使用 * 字符,如下所示:

然后我们可以声明如下内容:

然后我们像这样从变量创建指针:

我们稍后将深入探讨这些概念,但了解 Go 中包含的基本类型非常重要。

恭喜您在 Go 语言中又迈进了一步。它可能不如Python 简单,但它远没有 C、C++ 或类似编程语言那么复杂。

本文在云云众生(yylives.cc/)首发,欢迎大家访问。

相关推荐
FungLeo5 小时前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
我不会起名字3227 小时前
Redis 从 0 到 1(二十八):Redis 抖一下,重试把它打挂了——超时/重试/熔断的 Go 封装
redis·go·超时·熔断·重试
xyzzklk9 小时前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
vipxieliang1 天前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
我不会起名字3222 天前
Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试
redis·go·序列化·protobuf·messagepack
我不会起名字3222 天前
Redis 从 0 到 1(二十三):一个热 key 打到 10 万 QPS——hotkey 与本地缓存的 Go 实现
redis·缓存·go·qps·hotkey
Patrick_Wilson3 天前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
Patrick_Wilson3 天前
从文本输出理解 Go 方法与接口
后端·go·编程语言
Patrick_Wilson3 天前
读懂一个 Go JSON 处理函数:从输入数据追踪结构体、校验与错误返回
go·json·编程语言
Patrick_Wilson3 天前
第一次读 Go 项目:从两个源码文件弄清 package、import 和 go.mod
后端·go·编程语言