Golang学习笔记_07——基本类型

news/2024/12/16 23:20:42/

Golang学习笔记_04——递归函数
Golang学习笔记_05——延迟调用
Golang学习笔记_06——变量和常量


文章目录

    • 基本类型
      • 1. 介绍
      • 2. 类型转换
      • 3. 类型推断
      • 4. 示例
    • 2. 零值
      • 2.1 定义
      • 2.2 特性
      • 2.3 各类数据类型的零值
      • 2.4 零值的用途
      • 2.5 零值 && nil 比较
      • 2.6 示例
    • 源码


基本类型

1. 介绍

  1. 布尔类型(Boolean Type)
    • 类型关键字bool
    • 取值范围truefalse
  2. 整数类型(Integer Types)
    • 有符号整数int8, int16, int32, int64,以及 int(根据平台不同,通常为32位或64位)
    • 无符号整数uint8, uint16, uint32, uint64, 以及 uintptr(无符号整数,足以存储指针)
    • 其他rune(等价于 int32,用于表示Unicode码点)和 byte(等价于 uint8,用于表示字节)
  3. 浮点类型(Floating-point Types)
    • 类型关键字float32float64
    • 取值范围float32 是32位浮点数,float64 是64位浮点数
  4. 复数类型(Complex Types)
    • 类型关键字complex64complex128
    • 取值范围complex64 是由两个 float32 组成的复数,complex128 是由两个 float64 组成的复数

2. 类型转换

表达式 T(v) 将值 v 转换为类型 T

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

简短形式

i := 42
f := float64(i)
u := uint(f)

3. 类型推断

在声明一个变量而不指定其类型时(即使用不带类型的 := 语法 var = 表达式语法),变量的类型会通过右值推断出来。

var i int
j := i // j 也是一个 int

当右边包含未指明类型的数值常量时,新变量的类型就可能是 intfloat64complex128 了,这取决于常量的精度

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

4. 示例

var (ToBe   bool       = falseMaxInt uint64     = 1<<64 - 1z      complex128 = cmplx.Sqrt(-5 + 12i)
)func showDataType() {// 布尔类型var isGoFun bool = truefmt.Printf("类型:%T 值:%v\n\n", isGoFun, isGoFun)// 整数类型var num int = 42fmt.Printf("类型:%T 值:%v\n\n", num, num)// 浮点类型var pi float64 = 3.14fmt.Printf("类型:%T 值:%v\n\n", pi, pi)// 复数类型var complexNum complex128 = 1 + 2ifmt.Printf("类型:%T 值:%v\n\n", complexNum, complexNum)fmt.Printf("类型:%T 值:%v\n", ToBe, ToBe)fmt.Printf("类型:%T 值:%v\n", MaxInt, MaxInt)fmt.Printf("类型:%T 值:%v\n", z, z)}

测试方法

func Test_showDataType(t *testing.T) {showDataType()
}

输出结果

=== RUN   Test_showDataType
类型:bool 值:true类型:int 值:42类型:float64 值:3.14类型:complex128 值:(1+2i)类型:bool 值:false
类型:uint64 值:18446744073709551615
类型:complex128 值:(2+3i)
--- PASS: Test_showDataType (0.00s)
PASS

2. 零值

在Go语言中,零值(Zero Value)是一个非常重要的概念。它是指在声明变量但没有显式赋值的情况下,变量会被自动赋予的一个默认值。这个默认值取决于变量的类型,不同类型的变量会有不同的零值。

2.1 定义

零值是Go语言在声明变量时,如果未显式赋值,则自动赋予该变量的一个默认值。

2.2 特性

零值确保了变量在声明后具有一个可预测的初始状态,避免了未初始化变量可能引发的潜在问题。这有助于编写更加健壮和可靠的代码。

2.3 各类数据类型的零值

  1. 数值类型
    • 有符号整数(如int、int8、int16、int32、int64):零值为0。
    • 无符号整数(如uint、uint8、uint16、uint32、uint64):零值也为0。
    • 浮点数(如float32、float64):零值为0.0。
  2. 布尔类型
    • 布尔类型(bool):零值为false。

2.4 零值的用途

  1. 初始化变量:在声明变量时,可以使用零值来初始化变量,确保它们具有一个确定的初始状态。
  2. 值比较:在比较变量的值时,可以将其与对应类型的零值进行比较,以确定变量是否已被赋值或修改。
  3. 清空变量:有时候需要清空一个变量的值,可以将其赋值为对应类型的零值。
  4. 初始化数据结构:在定义复合数据类型(如结构体、数组、切片等)时,可以使用零值来初始化其元素或字段。

2.5 零值 && nil 比较

尽管在某些情况下nil和零值可能表现得相似(例如,nil切片和零值切片都表示空切片),但它们代表了不同的概念:

  • nil是一个特殊的值,通常用于表示指针、切片、映射、通道和接口等数据结构的未初始化状态。
  • 零值是指在声明变量但未显式赋值时,变量会自动被赋予的默认值。这个默认值取决于变量的类型。

了解nil和零值的区别有助于编写更加清晰和可读性强的代码。

2.6 示例

func showZeroValue() {var i intvar f float64var b boolvar s stringfmt.Printf("类型:%T 值:%v\n\n", i, i)fmt.Printf("类型:%T 值:%v\n\n", f, f)fmt.Printf("类型:%T 值:%v\n\n", b, b)fmt.Printf("类型:%T 值:%v\n\n", s, s)
}

测试方法

func showZeroValue() {var i intvar f float64var b boolvar s stringfmt.Printf("类型:%T 值:%v\n\n", i, i)fmt.Printf("类型:%T 值:%v\n\n", f, f)fmt.Printf("类型:%T 值:%v\n\n", b, b)fmt.Printf("类型:%T 值:%v\n\n", s, s)
}

输出结果

=== RUN   Test_showZeroValue
类型:int 值:0类型:float64 值:0类型:bool 值:false类型:string 值:--- PASS: Test_showZeroValue (0.00s)
PASS

源码

// basic_data_type.go 文件
package basic_data_type_demoimport ("fmt""math/cmplx"
)var (ToBe   bool       = falseMaxInt uint64     = 1<<64 - 1z      complex128 = cmplx.Sqrt(-5 + 12i)
)func showDataType() {// 布尔类型var isGoFun bool = truefmt.Printf("类型:%T 值:%v\n\n", isGoFun, isGoFun)// 整数类型var num int = 42fmt.Printf("类型:%T 值:%v\n\n", num, num)// 浮点类型var pi float64 = 3.14fmt.Printf("类型:%T 值:%v\n\n", pi, pi)// 复数类型var complexNum complex128 = 1 + 2ifmt.Printf("类型:%T 值:%v\n\n", complexNum, complexNum)fmt.Printf("类型:%T 值:%v\n", ToBe, ToBe)fmt.Printf("类型:%T 值:%v\n", MaxInt, MaxInt)fmt.Printf("类型:%T 值:%v\n", z, z)}func showZeroValue() {var i intvar f float64var b boolvar s stringfmt.Printf("类型:%T 值:%v\n\n", i, i)fmt.Printf("类型:%T 值:%v\n\n", f, f)fmt.Printf("类型:%T 值:%v\n\n", b, b)fmt.Printf("类型:%T 值:%v\n\n", s, s)
}
// basic_data_type_test.go 文件
package basic_data_type_demoimport "testing"func Test_showDataType(t *testing.T) {showDataType()
}func Test_showZeroValue(t *testing.T) {showZeroValue()
}

http://www.ppmy.cn/news/1555704.html

相关文章

MySQL--》解析事务从隔离级别到死锁处理

目录 初识事务 事务特性 事务并发 事务隔离 初识事务 事务&#xff1a;是一组操作的集合&#xff0c;它是不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败&#x…

【论文笔记】Visual Prompt Tuning

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Visual Prompt Tuning 作者…

python制造一个报错

在Python中&#xff0c;制造一个报错&#xff08;异常&#xff09;可以通过多种方式实现。最常见的方法之一是直接引发一个异常。以下是一些例子&#xff0c;展示了如何制造不同类型的报错&#xff1a; 引发ValueError异常&#xff1a; try:# 制造一个 ValueError 异常raise Va…

Vue3之TypeScript的支持

随着前端技术的飞速发展&#xff0c;Vue 3与TypeScript的组合已成为许多开发者的首选技术栈。Vue 3作为Vue.js的最新版本&#xff0c;引入了众多革新性的功能和优化&#xff0c;而TypeScript作为一种强大的静态类型检查语言&#xff0c;其严谨的类型系统和智能代码提示极大地增…

动态规划part03

文章参考来源代码随想录 题目参考来源leetcode 01背包问题 二维&#xff1a; 背包问题&#xff1a; 动规五部曲&#xff1a; 1.确定dp数组以及下标的含义&#xff1a; 其实这里由题目要我们求的就可以推出来了 把下标为0-i的物品装入容量为j的背包最大价值为dp[i][j]。 …

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端&#xff0c;都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100&#xff0c;即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.&#xff0c;显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件&#xff0c;删除Fir…

机器学习—大语言模型:推动AI新时代的引擎

云边有个稻草人-CSDN博客 目录 引言 一、大语言模型的基本原理 1. 什么是大语言模型&#xff1f; 2. Transformer 架构 3. 模型训练 二、大语言模型的应用场景 1. 文本生成 2. 问答系统 3. 编码助手 4. 多语言翻译 三、大语言模型的最新进展 1. GPT-4 2. 开源模型 …

基于python的一个简单的压力测试(DDoS)脚本

DDoS测试脚本 声明&#xff1a;本文所涉及代码仅供学习使用&#xff0c;任何人利用此造成的一切后果与本人无关 源码 import requests import threading# 目标URL target_url "http://47.121.xxx.xxx/"# 发送请求的函数 def send_request():while True:try:respo…