Go 语言变量类型:从入门到精通,一篇搞定所有知识点!

Go语言变量类型

  • 1. 基本类型
    • 1.1 数值类型
    • 1.2 布尔类型
    • 1.3 字符串类型
  • 2. 复合类型
    • 2.1 数组
    • 2.2 切片
    • 2.3 字典(map)
    • 2.4 结构体
    • 2.5 接口
  • 3. 类型转换
  • 4. 零值
  • 5. 示例

1. 基本类型

Go 语言中的基本类型主要包括数值类型、布尔类型和字符串类型。

1.1 数值类型

  • 整型
    • int:根据系统架构(32 位或 64 位)决定大小,通常用作默认整型。
    • int8:8 位有符号整型,范围:-128 到 127。
    • int16:16 位有符号整型,范围:-32,768 到 32,767。
    • int32:32 位有符号整型,范围:-2,147,483,648 到 2,147,483,647。
    • int64:64 位有符号整型,范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
    • uint:无符号整型,与 int 大小相同,范围从 0 到 2^(bits)-1。
    • uint8:8 位无符号整型,范围:0 到 255。
    • uint16uint32uint64:无符号整型,范围与相应的有符号整型相同。
var a int = 10
var b uint = 20
var c int64 = 10000000000
  • 浮点型
    • float32:32 位浮点数。
    • float64:64 位浮点数,精度更高。
var pi float32 = 3.14
var e float64 = 2.718281828459
  • 复数类型
    • complex64:64 位复数,实部和虚部分别是 float32
    • complex128:128 位复数,实部和虚部分别是 float64
var z complex64 = 1 + 2i // 1 是实部,2i 是虚部

1.2 布尔类型

布尔类型只有两个值:truefalse,用于条件判断和控制流。

var isAlive bool = true

1.3 字符串类型

字符串是 UTF-8 编码的字符序列。在 Go 中,字符串是不可变的(immutable),一旦创建就不能修改。

var greeting string = "Hello, World!"

2. 复合类型

复合类型是由多个基本类型组合而成的,主要包括数组、切片、字典、结构体和接口等。

2.1 数组

数组是固定长度的同类型元素的集合。数组的长度是类型的一部分,因此 [3]int[4]int 是不同的类型。

var arr [3]int // 声明一个长度为 3 的整型数组
arr[0] = 1
arr[1] = 2
arr[2] = 3

2.2 切片

切片是动态数组,可以在运行时调整大小。切片是基于数组构建的,具有更灵活的操作。

var slice []int // 声明一个整型切片
slice = append(slice, 1) // 添加元素
slice = append(slice, 2, 3, 4) // 添加多个元素

2.3 字典(map)

字典是键值对集合,用于快速查找。键必须是可比较的类型,值可以是任意类型。

var m map[string]int // 声明一个字符串到整型的映射
m = make(map[string]int)
m["one"] = 1
m["two"] = 2

2.4 结构体

结构体是用户定义的复合类型,可以包含多个不同类型的字段。

type Person struct {Name stringAge  int
}var p Person
p.Name = "Alice"
p.Age = 30

2.5 接口

接口是方法的集合,允许你定义某些行为。任何类型只要实现了接口中定义的方法,就可以被视为该接口的实现。

type Stringer interface {String() string
}func Print(s Stringer) {fmt.Println(s.String())
}

3. 类型转换

Go 允许进行类型转换,但需要显式声明。

var a int = 10
var b float64 = float64(a) // 将 int 转换为 float64

4. 零值

在 Go 中,变量在声明时会被赋予默认的“零值”。对于不同类型的零值如下:

  • 整型:0
  • 浮点型:0.0
  • 布尔型:false
  • 字符串:""(空字符串)
  • 切片、字典、指针、接口:nil

5. 示例

下面是一个完整的 Go 程序示例,展示了各种变量类型的使用:

package mainimport ("fmt"
)func main() {// 基本类型var a int = 10var b float64 = 3.14var isAlive bool = truevar greeting string = "Hello, Go!"fmt.Println("Integer:", a)fmt.Println("Float:", b)fmt.Println("Boolean:", isAlive)fmt.Println("String:", greeting)// 数组var arr [3]int = [3]int{1, 2, 3}fmt.Println("Array:", arr)// 切片slice := []int{1, 2, 3}slice = append(slice, 4, 5)fmt.Println("Slice:", slice)// 字典m := make(map[string]int)m["one"] = 1m["two"] = 2fmt.Println("Map:", m)// 结构体type Person struct {Name stringAge  int}p := Person{Name: "Alice", Age: 30}fmt.Println("Person:", p)// 接口type Stringer interface {String() string}func (p Person) String() string {return fmt.Sprintf("Name: %s, Age: %d", p.Name, p.Age)}Print(p)
}func Print(s Stringer) {fmt.Println(s.String())
}

在这个示例中,我们展示了基本类型、复合类型(数组、切片、字典、结构体)、接口的用法,以及如何定义和实现接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2548.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

go中Println和Printf的区别

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 go中Println和Printf的区别 package mainimport ( "fmt" )//TIP To run your code, right-click the c…

矩阵NFC碰一碰发视频源码开发技术解析,支持OEM

一、引言 在当今数字化营销的热潮中,矩阵爆店码成为了助力商家引流推广的重要工具。开发矩阵爆店码的源码涉及到多种技术的综合运用,本文将深入探讨其开发过程中的关键技术要点。 二、技术选型 (一)后端开发技术 编程语言 选择一…

零基础嵌入式工程师成长路线以及如何学习嵌入式操作系统?

以下是一条零基础嵌入式工程师的成长路线: **一、入门阶段(3 - 6个月)** 1. **学习基础知识** - **编程语言**: C语言是嵌入式开发的基础。学习C语言的基本语法,包括数据类型(如整型、字符型、浮点型&am…

数据结构之二叉树前序,中序,后序习题分析(递归图)

1.比较相同的树 二叉树不能轻易用断言,因为树一定有空 2.找结点值 3.单值二叉树 4.对称二叉树 5.前序遍历

C++设计模式结构型模式———组合模式

文章目录 一、引言二、组合模式三、总结 一、引言 组合模式是一种结构型设计模式, 可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。代码实现中涉及了递归调用。组合模式与传统上的“类与类之间的组合关系”没有关联,不…

电子商城购物平台的设计与开发+ssm(lw+演示+源码+运行)

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,电子商城购物平台小程序被用户普遍使用,为方便…

用离线的方式(使用U盘)将Qt文件装载到开发板

第一步:打开虚拟机软件,加载Linux系统进入桌面 桌面 第二步:将U盘插入电脑,挂载到虚拟机中选择连接到虚拟机,虚拟机名称为alientek U盘接入虚拟机 第三步:将mp157开发板一端连接在USB_TTL接口&#xff…

Android 字节飞书面经

Android 字节飞书面经 文章目录 Android 字节飞书面经一面二面 一面 1. 线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 2. 根本区别:进程是操作系统资源分配的基本单位,…

针对告警数量、告警位置、告警类型等参数进行统计,并做可视化处理的智慧能源开源了。

一、简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,减少企业级应用约 95%的开发成本,在强大视频算…

Linux系统的入门使用

前言一、常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二、磁盘 磁盘接口磁盘的文件名 三、分区 分区表开机检测程序 四、文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置 五、文件 文件属性文件与目录的基本…

软考系统分析师知识点三二:案例知识点三

前言 今年报考了11月份的软考高级:系统分析师。 考试时间:11月9日。 倒计时:5天。 目标:优先应试,其次学习,再次实践。 复习计划第三阶段:总结案例知识点,并作为论文的框架知识…

无人机维护保养、部件修理更换技术详解

无人机作为一种精密的航空设备,其维护保养和部件修理更换是确保飞行安全、延长使用寿命的重要环节。以下是对无人机维护保养、部件修理更换技术的详细解析: 一、无人机维护保养技术 1. 基础构造理解: 熟悉无人机的基本构造,包括…

高校大数据实训平台介绍

高校大数据实验室架构 具体实训平台介绍 编程实训平台 1、大数据开发实训平台 大数据开发实训平台是面向实训课和课后训练的编程实训平台,平台底层基于Docker技术,采用容器云部署方案,预装大数据相关课程教学所需的实训环境…

SQL基础—2

1.左外连接查询(left join on) A - A∩B 左外连接查询两张表条件都满足的数据,以及左边表(A表)存在的数据(以左边表为主查询表)。 A - A∩B (A和A交B)。 示例:使用左外连接将dept表作为主查询表,查询员工编号、员工姓…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接:R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

如何自学机器学习?

自学机器学习可以按照以下步骤进行: 一、基础知识准备 数学基础: 高等数学:学习微积分(包括导数、微分、积分等)、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数:掌握矩阵…

wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)

Flyout 属性 CloseButtonVisibility: 设置为 Collapsed,意味着关闭按钮不可见。TitleVisibility: 设置为 Collapsed,意味着标题不可见。IsPinned: 设置为 True,意味着这个 Flyout 会固定住,不会自动关闭。Opacity: 设置为 1&…

6个步骤,轻松搞定Linux上web UI自动化测试!

对于web端的UI自动化,相信大家都不会陌生,因为很多小伙伴都做过,或者了解到过,但是小编相信,大多数了解到的都是通过windows系统上进行运行web端的UI自动化,在linux上面很少运行UI自动化或者如何执行自动化…

[论文阅读]Label-Only Membership Inference Attacks

Label-Only Membership Inference Attacks Proceedings of the 38th International Conference on Machine Learning Label-Only Membership Inference Attacks 只使用硬标签就可以判断是否是成员的方法,但是是在机器学习模型上。 通过分析模型在扰动下的预测标…

万宇科技闪耀创新舞台 荣膺潜在独角兽企业殊荣

2024年10月24日,在“2024东北亚(沈阳)人才交流大会暨中国潜在独角兽企业发展大会”上,长城战略咨询重磅发布《GEI中国潜在独角兽企业研究报告2024》,揭示了中国潜在独角兽企业群体的最新发展态势。其中,安徽万宇机械设备科技有限公…