Golang 的相关总结
指针
C/C++的指针有点不同。
C/C++の値C/C++のポインタgolangの値golangのポインタポインタの取り方&val
&val
フィールド(メンバ)へのアクセスval.memberptr->memberval.fieldptr.fieldポインタ演算
あり
なし参照外し
*ptr
*ptrダブルポインタ
&ptr
&ptr
&val
フィールド(メンバ)へのアクセスval.memberptr->memberval.fieldptr.fieldポインタ演算
あり
なし参照外し
*ptr
*ptrダブルポインタ
&ptr
&ptr
如果隐式类型转换和类型推断不起作用
我觉得我在这里完全误解了,所以我会删除它。
方法
package main
type Hoge struct {}
func (h Hoge) value() {}
func (h *Hoge) pointer() {}
func main() {
val := Hoge{}
ptr := &val
}
假设有这样的代码,val、ptr 和 .value()、.pointer() 的调用组合如下。
valptr.value()okok.pointer()okok
调用其他的方法
可以像上面网址所示的那样,以以下方式调用该方法。
package main
type Hoge struct {}
func (h Hoge) value() {}
func (h *Hoge) pointer() {}
func main() {
val := Hoge{}
fv := Hoge.value
fv(val)
fp := (*Hoge).value
fp(&val)
}
Hoge, Hoge的.value和.pointer的提取组合如下
Hogeそのときの型*Hogeそのときの型.valueokfunc(Hoge)okfunc(*Hoge).pointerng
okfunc(*Hoge)
okfunc(*Hoge)
接口
以下代码将导致编译错误。
package main
type Testable interface {
test()
}
type Model struct {}
func (m *Model) test() {}
func main() {
val := Model{}
ptr := &val
var tester Testable
tester = ptr // こっちは通る
tester = val // こっちはダメ
_ = tester
}
这似乎是因为val是Model类型,而且实现了Testable接口,所以不行。
val, ptr和实现方的组合如下
valptrfunc (m *Model)ngokfunc (m Model)okok
接口指针
以下是两个链接的原汁原味的中文释义:
http://qiita.com/suin/items/68ed7020d21dca047a73
这是一篇讲述如何通过Shell脚本提高生产力的文章。
http://qiita.com/zetamatta/items/62645bb9ad8d4cf37acb
这是一篇关于在Windows上使用Emacs的技巧的文章。
以下的代码无法通过编译,会报错。
package main
type Testable interface {
test()
}
func doit(t *Testable) {
t.test()
}
func main() {
}
如果非要使用*Testable的话
package main
type Testable interface {
test()
}
func doit(t *Testable) {
(*t).test()
}
func main() {
}
如果像那样先暂时取消引用一次,就能通过。