在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
https://studygolang.com/articles/18822?tdsourcetag=s_pcqq_aiomsg https://blog.csdn.net/hittata/article/details/50915496 https://blog.csdn.net/hittata/article/details/51250179 pre-declared type (预声明类型) golang 默认的有几个预声明类型:boole,num(所有的数字类型),string 这些预声明类型被用来构造其他的类型。 composite types(复合类型) 由其他预声明类型组合而成(没有使用type 关键字定义),如: array,struct,pointer,slice,map,channel,function,interface 命名类型和非命名类型 unamed type: 一个类型是由先前已声明类型组合构成被称为类型字面量(type literal) 二者区别: unnamed type:不能定义自己的method
一个特别重要的事情需要记住:pre-declared types 也是命名类型。所以:int 是named type , 但是 *int ,[]int 不是。 特别注意:我们不能直接为int 定义method func (a int) methodname() { } 不是因为int 是unnamed type ,而是为一个type定义方法必须在该类型的所在的package , int 的scope (作用域是)universe (全局的),int 是语言层面预声明的,其属于任何package,也就没有办法为其增加method. package main import ( "fmt" ) func (a int) Print() { fmt.Println(a) } func main() { m := 12 a.Print() } [root@localhost /project/go/src/test]#go build name.go # command-line-arguments ./name.go:7: cannot define new methods on non-local type int ./name.go:13: undefined: a Underlying Type 底层类型
另一条重要规则是:
这里表达的意思就是:一旦你定义一个新类型,你往往是想为其定义一个新的methods set static type 静态类型和dynamic type 动态类型 static type就是变量定义声明时的类型, 非interface 的类型的dynamic type 就是其static type |
请发表评论