0
点赞
收藏
分享

微信扫一扫

关于如何创建一个可配置的 SpringBoot Web 项目的全局异常处理

青乌 2024-05-24 阅读 3

文章目录

1 自定义类型是什么?


2 自定义类型如何定义?

  • 单个类型定义,也支持使用结构体struct{}
type num int
type str string
type success bool

// 支持结构体struct{}
type Person struct{}

  • 批量类型定义
// 批量类型定义
type (
    num1 int
    num2 int8
    num3 int16
)

3 自定义类型与其它数据类型是否可比较?


  • 自定义类型不支持跟其他类型直接比较,代码示例如下:
// 给int新定义了类型:code
type code int  
  
func TestDataTypeAlias(t *testing.T) {  
    var success code = 200  
    var success1 int = 200  
  
    // 报错: invalid operation: success != success1 (mismatched types code and int)    if success != success1 {  
       fmt.Println("因为%s和%s的数据类型不同,不能直接进行比较,需先转换成同一类型!")  
    } else {  
       fmt.Println("相同")  
    }  
}

4 自定义类型和类型别名的区别是什么?

  • 自定义类型:创建的是一个全新的类型,所以不可与原类型相互赋值和比较
  • 类型别名:是给现有类型创建一个新的名称,跟原数据类型是一样的,可以与原类型相互赋值和比较。Go语言中的特殊数据类型:类型别名Type Alias

// int定义新类型  
type code int  
  
// int取别名  
type age = int

func TestDataTypeAlias2(t *testing.T) {  
    var success int = 200  
    var success1 age = 200  
    var success2 code = 200  
  
    fmt.Printf("%v\n", success == success1) //因为类型取的是别名,其数据类型还是int,没有变化  
    fmt.Printf("%T\n", success)  
    fmt.Printf("%T\n", success1)  
    fmt.Printf("%T\n", success2)  
    fmt.Printf("%v\n", success == success2) //因为类型不同,所以不能比较,所以返回编译错误  
}

5 自定义类型的应用场景有哪些?

5.1 绑定方法

type Celsius float64 

// 自定义类型Celsius绑定了方法String
func (c Celsius) String() string { 
    return fmt.Sprintf("%g°C", c) 
}

5.2 实现接口

type Person struct{
    name string
}

// 自定义类型:Person
func (p Person)GetName()string{
    return p.name
}

5.3 增加安全性

type GoodId int
type Code int
type Age int

5.4 增加代码可读性

// 自定义用户ID
type UserID int 

// 形参id的数据类型为自定义类型UserID,直到传入的形参ID为用户ID,增加代码可读性
func getUserByID(id UserID) User { 
    // 实现代码 
}

6 知识总结

7 学习交流

为了方便大家一起学习一起进步,我创建了一个学习交流的平台
感兴趣的朋友们可以加我微信:LH913582934,备注:CSDN

举报

相关推荐

0 条评论