您的位置:首页 > 科技 > 能源 > 日照疫情最新消息今天封城了_免费cad图纸下载网_成人教育机构排行前十名_营销技巧

日照疫情最新消息今天封城了_免费cad图纸下载网_成人教育机构排行前十名_营销技巧

2024/12/23 10:34:54 来源:https://blog.csdn.net/LuckyLay/article/details/144448517  浏览:    关键词:日照疫情最新消息今天封城了_免费cad图纸下载网_成人教育机构排行前十名_营销技巧
日照疫情最新消息今天封城了_免费cad图纸下载网_成人教育机构排行前十名_营销技巧

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()
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com