go自定义类型 (type MyInt int 和 type MyInt = int )

为什么需要自定义类型

go 不像 Java/C# 那样是面向对象的编程语言,它有自己独特的设计方式,自定义类型就属于其中之一,可以使代码更易于理解。
使用自定义类型可以在原始类型定义的包之外,创建新的类型,来实现自己所需要的方法。 注意:不能在原始类型所在的包外定义原始类型的方法

package myInt
type MyInt int
// 自定义类型,可以在int包外创建如下方法:
func (m MyInt) Println() {
	fmt.Println(m)
}
// 这种方式是不行的
func (m int) Println() {
	fmt.Println(m)
}

// 当然,我们也可以通过将原始类型传给函数,来达到相同的目的
func Println(m int) {
	fmt.Println(m)
}

声明

type 自定义类型 原始类型
例子:
type MyInt int
type MyIntSon MyInt

实际使用场景

  1. 通常在和c交互的时候,cgo中用的比较多,举个例子:type IPortableDevice C.IPortableDevice
  2. 在引用第三方包,并且希望为其中的原始类型添加方法或者隐藏原始类型方法的时候

type MyInt int 和 type MyInt = int 的区别

type MyInt int
自定义类型,可以在int包外创建如下方法:
func (m MyInt) Println() {
	fmt.Println(m)
}

type MyInt1 = int
// 编译不通过
func (m MyInt1) Println() {
	fmt.Println(m)
}
这个就相当于是int,不能在int包外定义方法。目前还没发现哪里用到了这种定义方式。

简单的小例子

package main
import (
	"fmt"
)
type app []string
func main() {
	data := app{"英雄联盟", "王者荣耀", "小垃圾"}
	data.Print()
}
func (data app) Print() {
	for _, v := range data {
		fmt.Println(v)
	}
}

所想要表述的意思就是:使用自定义类型,可以使我们的代码可读性更好,更易于扩展,代码结构更为清晰。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义类型转换是指在类定义定义类型转换函数,将类对象(或引用)转换为其他类型的值(或引用)。C++ 中支持两种类型转换函数:转换构造函数和类型转换运算符。 1. 转换构造函数 转换构造函数是一种特殊的构造函数,其唯一参数是要转换的目标类型。例如: ```c++ class MyInt { public: MyInt(const string& str) { value = stoi(str); } int getValue() const { return value; } private: int value; }; int main() { MyInt myInt("123"); int i = myInt.getValue(); cout << i << endl; // 输出 123 return 0; } ``` 上述代码中,MyInt定义了一个转换构造函数,参数为 string 类型,将其转换为 int 类型并存储在类的私有变量 value 中。在 main 函数中,使用 MyInt 对象初始化了一个 int 类型的变量 i,调用了 getValue 函数返回了 123。 2. 类型转换运算符 类型转换运算符是一种成员函数,用于将类对象(或引用)转换为其他类型的值(或引用)。它可以被重载为任何目标类型,返回目标类型的值或引用。例如: ```c++ class MyInt { public: operator int() const { return value; } private: int value; }; int main() { MyInt myInt; myInt = 123; int i = myInt; cout << i << endl; // 输出 123 return 0; } ``` 上述代码中,MyInt定义了一个类型转换运算符,将 MyInt 对象转换为 int 类型。在 main 函数中,首先使用赋值运算符将 123 赋值给 myInt,然后使用类型转换运算符将 myInt 转换为 int 类型的变量 i,输出了 123。 需要注意的是,类型转换运算符有一定的风险,可能会导致意外的类型转换,因此应该慎重使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值