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

张开发
2026/6/8 18:41:44 15 分钟阅读
Go语言中的自定义类型与类型别名
Go语言中的自定义类型与类型别名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 Im %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. 总结自定义类型创建新的类型提供更好的类型安全类型别名只是原类型的新名称方便代码重构和迁移合理使用自定义类型可以提高代码的可读性和可维护性为自定义类型添加方法可以实现面向对象的编程范式

更多文章