Go语言中的自定义类型与类型别名详解

 更新时间:2026年04月16日 09:56:42   作者:王码码2035哦  
文章介绍了Go语言中的自定义类型和类型别名,自定义类型使用type关键字创建,基于基本类型、结构体或接口,类型别名使用typealias=original语法,创建新名称引用原有类型,文章介绍的非常详细,感兴趣的朋友一起看看吧

1. 自定义类型

在Go语言中,我们可以使用type关键字创建自定义类型。自定义类型可以基于基本类型、结构体、接口等创建。

1.1 基于基本类型创建自定义类型

package main
import "fmt"
// 基于int创建自定义类型
type MyInt int
// 为自定义类型添加方法
func (m MyInt) Add(other MyInt) MyInt {
	return m + other
}
func main() {
	var a MyInt = 10
	var b MyInt = 20
	fmt.Println("a + b =", a.Add(b))
}

1.2 基于结构体创建自定义类型

package main
import "fmt"
type Person struct {
	Name string
	Age  int
}
// 为Person添加方法
func (p Person) Greet() string {
	return fmt.Sprintf("Hello, my name is %s and I'm %d years old", p.Name, p.Age)
}
func main() {
	p := Person{Name: "Alice", Age: 30}
	fmt.Println(p.Greet())
}

2. 类型别名

类型别名使用type alias = original语法,它创建一个新的名称来引用原有类型,但不会创建新的类型。

package main
import "fmt"
// 类型别名
type MyString = string
type IntSlice = []int
func main() {
	var s MyString = "Hello"
	fmt.Println(s)
	var numbers IntSlice = []int{1, 2, 3, 4, 5}
	fmt.Println(numbers)
}

3. 自定义类型与类型别名的区别

特性自定义类型类型别名
语法type NewType OriginalTypetype NewType = OriginalType
类型关系新类型与原类型不同新名称是原类型的别名
方法可以为新类型添加方法共享原类型的方法
转换需要显式转换可以隐式转换

4. 实战应用

4.1 领域特定类型

package main
import "fmt"
type Temperature float64
type Distance int
func (t Temperature) Celsius() Temperature {
	return t
}
func (t Temperature) Fahrenheit() Temperature {
	return t*9/5 + 32
}
func main() {
	temp := Temperature(25)
	fmt.Printf("%f°C = %f°F\n", temp.Celsius(), temp.Fahrenheit())
}

4.2 类型安全

package main
import "fmt"
type UserID int
type ProductID int
func getUser(id UserID) string {
	return fmt.Sprintf("User %d", id)
}
func getProduct(id ProductID) string {
	return fmt.Sprintf("Product %d", id)
}
func main() {
	userID := UserID(1)
	productID := ProductID(2)
	fmt.Println(getUser(userID))
	fmt.Println(getProduct(productID))
	// 类型安全,下面的代码会编译错误
	// getUser(productID) // 类型不匹配
}

5. 总结

  • 自定义类型创建新的类型,提供更好的类型安全
  • 类型别名只是原类型的新名称,方便代码重构和迁移
  • 合理使用自定义类型可以提高代码的可读性和可维护性
  • 为自定义类型添加方法可以实现面向对象的编程范式

到此这篇关于Go语言中的自定义类型与类型别名详解的文章就介绍到这了,更多相关go自定义类型与类型别名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go 语言中的死锁问题解决

    Go 语言中的死锁问题解决

    本文主要介绍了Go 语言中的死锁问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • 使用Go语言实现配置文件热加载功能

    使用Go语言实现配置文件热加载功能

    这篇文章主要介绍了使用Go语言实现配置文件热加载功能,以及配置文件热加载包的实现思路,需要的朋友可以参考下
    2018-03-03
  • Golang判断两个链表是否相交的方法详解

    Golang判断两个链表是否相交的方法详解

    这篇文章主要为大家详细介绍了如何通过Golang判断两个链表是否相交,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • Go语言resty http包调用jenkins api实例

    Go语言resty http包调用jenkins api实例

    这篇文章主要为大家介绍了Go语言resty http包调用jenkins api实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang sync.Map底层实现场景示例详解

    Golang sync.Map底层实现场景示例详解

    这篇文章主要为大家介绍了Golang sync.Map底层实现及使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 基于Go语言实现插入排序算法及优化

    基于Go语言实现插入排序算法及优化

    插入排序是一种简单的排序算法。这篇文章将利用Go语言实现冒泡排序算法,文中的示例代码讲解详细,对学习Go语言有一定的帮助,需要的可以参考一下
    2022-12-12
  • Golang第三方库robfig/cron定时器库用法小结

    Golang第三方库robfig/cron定时器库用法小结

    robfig/cron是Golang生态中最常用的定时器库之一,实现了标准的Unix Cron表达式解析与任务调度功能,本文就来详细的介绍一下第三方库robfig/cron定时器库用法,感兴趣的可以了解一下
    2026-04-04
  • 浅谈Go语言中高效并发模式

    浅谈Go语言中高效并发模式

    Go语言并发编程提供了丰富的模式,包括基础Goroutine、Channel和Select机制,以及多种高级并发模式,本文就来详细的介绍一下,感兴趣的可以了解一下
    2025-10-10
  • golang操作elasticsearch的实现

    golang操作elasticsearch的实现

    这篇文章主要介绍了golang操作elasticsearch,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Go语言dolphinscheduler任务调度处理

    Go语言dolphinscheduler任务调度处理

    这篇文章主要为大家介绍了Go语言dolphinscheduler任务调度处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论