在 Go 语言中, type 关键字用于定义新的类型

# type MyInt inttype MyInt = int 区别

类型定义 vs 类型别名

  • type MyInt int  定义了一个新的命名类型  MyInt , 它底层使用  int  类型的存储结构,但是它与  int  类型是 <font color="#ff0000"> 完全独立的 </font>。
  • type MyInt = int  则是定义了一个类型别名, MyInt  只是  int  类型的另一个名字,<font color="#ff0000"> 两者是等价的 </font>。
  • 在编译的时候,类型别名会被替换为 int

因此以下代码会出错, i1(MyInt)i2(int32) 的类型不一样,无法将 i1 的值赋值给 i2

1
2
3
4
5
6
7
type MyInt int32
var (
i1 MyInt
i2 int32
)
i1 = 4
i2 = i1

以下代码正常运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func main() {
type MyInt = int32
var (
i1 MyInt
i2 int32
)
i1 = 4
i2 = i1
fmt.Println(i1, i2)
}

# 自定义类型绑定方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
"strconv"
)

type MyInt int32

func (mi MyInt) string() string {
return strconv.Itoa(int(mi))
}

func main() {
var i MyInt = 6
fmt.Printf("type:%T,%s", i.string(), i.string())
}

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

colagold 微信支付

微信支付

colagold 支付宝

支付宝