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/)首发,欢迎大家访问。

相关推荐
研究司马懿17 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
梦想很大很大1 天前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
lekami_兰1 天前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
却尘2 天前
一篇小白也能看懂的 Go 字符串拼接 & Builder & cap 全家桶
后端·go
ん贤2 天前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
mtngt112 天前
AI DDD重构实践
go
Grassto4 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
Grassto5 天前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
程序设计实验室6 天前
2025年的最后一天,分享我使用go语言开发的电子书转换工具网站
go
我的golang之路果然有问题6 天前
使用 Hugo + GitHub Pages + PaperMod 主题 + Obsidian 搭建开发博客
golang·go·github·博客·个人开发·个人博客·hugo