This commit is contained in:
songleo
2016-01-18 16:34:44 +08:00
parent 623ecedb11
commit 9bb931257a
2 changed files with 3 additions and 3 deletions

View File

@@ -139,7 +139,7 @@ func (t time.Time) first3Chars() string {
} }
``` ```
类型在其他的,或是非本地的包里定义,在它上面定义方法都会得到和上面同样的错误。 类型在其他的,或是非本地的包里定义,在它上面定义方法都会得到和上面同样的错误。
但是有一个间接的方式可以先定义该类型比如int 或 float的别名类型然后再为别名类型定义方法。或者像下面这样将它作为匿名类型嵌入在一个新的结构体中。当然方法只在这个别名类型上有效。 但是有一个间接的方式可以先定义该类型比如int 或 float的别名类型然后再为别名类型定义方法。或者像下面这样将它作为匿名类型嵌入在一个新的结构体中。当然方法只在这个别名类型上有效。
@@ -198,7 +198,7 @@ First 3 chars: Mon
如果想要方法改变接收者的数据,就在接收者的指针类型上定义该方法。否则,就在普通的值类型上定义方法。 如果想要方法改变接收者的数据,就在接收者的指针类型上定义该方法。否则,就在普通的值类型上定义方法。
下面的例子 `pointer_value.go` 作了说明:`change()`接受一个指向 B 的指针,并改变它内部的成员;`write()` 接受通过拷贝接受 B 的值并只输出B的内容。注意 Go 为我们做了探测工作,我们自己并没有指出是否在指针上调用方法Go 替我们做了这些事情。b1 是值而 b2 是指针,方法都支持运行了。 下面的例子 `pointer_value.go` 作了说明:`change()`接受一个指向 B 的指针,并改变它内部的成员;`write()` 接受通过拷贝接受 B 的值并只输出B的内容。注意 Go 为我们做了探测工作我们自己并没有指出是否在指针上调用方法Go 替我们做了这些事情。b1 是值而 b2 是指针,方法都支持运行了。
示例 10.13 pointer_value.go 示例 10.13 pointer_value.go

View File

@@ -1,6 +1,6 @@
# 10.7 类型的 String() 方法和格式化描述符 # 10.7 类型的 String() 方法和格式化描述符
当定义一个有很多方法的类型时,十之八九你会使用 `String()` 方法来定制类型的字符串形式的输出,换句话说:一种可阅读性和打印性的输出。如果类型定义了 `String()` 方法,它会被用在 `fmt.Printf()` 中生成默认的输出:等同于使用格式化描述符 `%v` 产生的输出。还有 `fmt.Print()``fmt.Println()` 也会自动使用 `String()` 方法。 当定义一个有很多方法的类型时,十之八九你会使用 `String()` 方法来定制类型的字符串形式的输出,换句话说:一种可阅读性和打印性的输出。如果类型定义了 `String()` 方法,它会被用在 `fmt.Printf()` 中生成默认的输出:等同于使用格式化描述符 `%v` 产生的输出。还有 `fmt.Print()``fmt.Println()` 也会自动使用 `String()` 方法。
我们使用第 10.4 节中程序的类型来进行测试: 我们使用第 10.4 节中程序的类型来进行测试: