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 OriginalType | type 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为例探究beyla从环境变量BEYLA_OPEN_PORT发现进程原理
这篇文章主要为大家介绍了以golang进程为例,研究beyla从环境变量BEYLA_OPEN_PORT(即通过端口)发现进程的原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12


最新评论