0
点赞
收藏
分享

微信扫一扫

网络编程之初识网络

忍禁 2024-12-14 阅读 18

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


文章目录


基本类型

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       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func showDataType() {

	// 布尔类型
	var isGoFun bool = true
	fmt.Printf("类型:%T 值:%v\n\n", isGoFun, isGoFun)

	// 整数类型
	var num int = 42
	fmt.Printf("类型:%T 值:%v\n\n", num, num)

	// 浮点类型
	var pi float64 = 3.14
	fmt.Printf("类型:%T 值:%v\n\n", pi, pi)

	// 复数类型
	var complexNum complex128 = 1 + 2i
	fmt.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 int
	var f float64
	var b bool
	var s string
	fmt.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 int
	var f float64
	var b bool
	var s string
	fmt.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_demo

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func showDataType() {

	// 布尔类型
	var isGoFun bool = true
	fmt.Printf("类型:%T 值:%v\n\n", isGoFun, isGoFun)

	// 整数类型
	var num int = 42
	fmt.Printf("类型:%T 值:%v\n\n", num, num)

	// 浮点类型
	var pi float64 = 3.14
	fmt.Printf("类型:%T 值:%v\n\n", pi, pi)

	// 复数类型
	var complexNum complex128 = 1 + 2i
	fmt.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 int
	var f float64
	var b bool
	var s string
	fmt.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_demo

import "testing"

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

func Test_showZeroValue(t *testing.T) {
	showZeroValue()
}
举报

相关推荐

0 条评论