go学习记录day2(2)

万能类型

  • interface{}
func myfunc(arg interface{}){
    value,erro := arg.(string) //判断arg是否是string interface{}独有
}
//可以传递任意类型的参数

golang pair

  • golang每个变量都是由type-value组成 type又分为static和concrete
type Reader interface{
	ReadBook()
}
type Writer interface{
	WriteBook()
}
type Book struct{
	page int
}

func (b *Book) ReadBook(){
	fmt.Println("Reading Book")
}

func (b *Book) WriteBook(){
	fmt.Println("Writing Book")
}

func main(){

	var book Book
	
	var r Reader
    //r:pair<type:book,value:Book{}>
	r = &book
	r.ReadBook()
	var w Writer
    //w:pair<type:book,value:Book{}>
	w = r.(Writer)
	w.WriteBook()
	/*
    ---------------------- 上下的输出结果一样
    Reading Book
    Writing Book
    */ 
	book := &Book{}
	var r Reader
	r = book
	r.ReadBook()
	var w Writer
	w = r.(Writer)
	w.WriteBook()
}

反射

import(
	"fmt"
	"reflect"
)
type User struct{
	Id int
	Name string
	Age int
}
func (u *User) Call(){
	u.Id = 100
	// fmt.Printf("%v\n",u)
}
func (u User) Call1(){
	u.Id = 10
	// fmt.Printf("%v\n",u)
}

func main(){

	user:=User{1,"ding",18}
	user.Call()
	argType:= reflect.TypeOf(&user)
	fmt.Println(user)
	fmt.Println(argType)
	fmt.Println(argType.NumMethod())
	fmt.Println("---------")
	argType1:= reflect.TypeOf(user)
	user.Call1()
	fmt.Println(user)
	fmt.Println(argType1)
	fmt.Println(argType1.NumMethod())
}
/*
{100 ding 18}
*main.User
2
---------
{100 ding 18}
main.User
1
*/
  • 结构体方法使用指针反射时能获得所有的方法,使用值副本传递时只能获得非指针方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值