From f8e45c00eb476e1da14b4641a5332da34c4f34f6 Mon Sep 17 00:00:00 2001 From: JessonChan Date: Wed, 7 Nov 2012 23:30:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?275~277=E8=AF=B4=E7=9A=84=E5=A5=BD=E9=9A=BE?= =?UTF-8?q?=E6=87=82=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.6.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2.6.md b/2.6.md index b284c0b6..31fdf8ee 100644 --- a/2.6.md +++ b/2.6.md @@ -187,12 +187,12 @@ interface类型定义了一组方法,如果某个对象实现了某个接口 ### interface函数参数 interface的变量可以持有任意实现该interface类型的对象,这给我们编写函数(包括method)提供了一些额外的思考,我们是不是可以通过定义interface参数,让函数接受各种类型的参数。 -举个例子:我们已经知道fmt.Println是我们常用的一个函数,但是你是否注意到它可以接受任意类型的数据。打开fmt的源码文件,你会看到这样一个定义: +举个例子:fmt.Println是我们常用的一个函数,但是你是否注意到它可以接受任意类型的数据。打开fmt的源码文件,你会看到这样一个定义: type Stringer interface { String() string } -任何实现了String方法的类型都能作为参数去调用fmt.Println,让我们来试一试 +也就是说,任何实现了String方法的类型都能作为参数被fmt.Println调用,让我们来试一试 package main import ( From 8e27feb319de09bd1b7ea2d2eb916d9cf705b9e4 Mon Sep 17 00:00:00 2001 From: JessonChan Date: Thu, 8 Nov 2012 09:13:23 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.6.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2.6.md b/2.6.md index 31fdf8ee..a4c9b8c7 100644 --- a/2.6.md +++ b/2.6.md @@ -356,12 +356,12 @@ Go里面真正吸引人的是他内置的逻辑语法,就像我们在学习Str ### 反射 Go语言实现了反射,所谓反射就是动态运行时的状态。我们一般用到的包是reflect包。如何运用reflect包,官方的这篇文章详细的讲解了reflect包的实现原理,[laws of reflection](http://golang.org/doc/articles/laws_of_reflection.html) -下面我简要的讲解一下一般的使用,我们使用reflect大概的分成三步,首先我们要去反射是一个类型的值(这些值都实现了空interface),需要把它转化成reflect对象(reflect.Type或者reflect.Value,根据不同的情况调用不同的函数)。这两种获取方式如下: +使用reflect一般分成三步,下面简要的讲解一下:要去反射是一个类型的值(这些值都实现了空interface),首先需要把它转化成reflect对象(reflect.Type或者reflect.Value,根据不同的情况调用不同的函数)。这两种获取方式如下: t := reflect.TypeOf(i) //得到类型的元数据,通过t我们能获取类型定义里面的所有元素 v := reflect.ValueOf(i) //得到实际的值,通过v我们获取存储在里面的值,还可以去改变值 -获取这个对象之后我们就可以进行一些操作了,也就是reflect对象转化成相应的值,例如 +转化为reflect对象之后我们就可以进行一些操作了,也就是将reflect对象转化成相应的值,例如 tag := t.Elem().Field(0).Tag //获取定义在strcut里面的标签 name := v.Elem().Field(0).String() //获取存储在第一个字段里面的值 @@ -387,7 +387,7 @@ Go语言实现了反射,所谓反射就是动态运行时的状态。我们一 v := p.Elem() v.SetFloat(7.1) -使用反射需要自己在编程中不断的深入去了解,我这边只能大概的介绍一些。 +上面只是对反射的简单介绍,更深入的理解还需要自己在编程中不断的实践。 ## links * [目录]()