소스 검색

备份

v1
AICells 5 년 전
부모
커밋
03b5244f6d
4개의 변경된 파일95개의 추가작업 그리고 0개의 파일을 삭제
  1. +9
    -0
      src/docs/go方法.md
  2. +0
    -0
      src/learn/method.go
  3. +33
    -0
      src/learn/methodSet.go
  4. +53
    -0
      src/learn/overMethod.go

+ 9
- 0
src/docs/go方法.md 파일 보기

@ -6,3 +6,12 @@
而且为防止混淆 不允许本身是指针的类型进行方法声明
type P *int
func (p P) f() {/* ... */} //编译错误 非法的接受者类型
# 方法集
类型有一个与之相关的方法集(method set) 这决定了他是否实现了某个接口
类型T方法集包含了所有 receiver T方法
类型*T方法集包含了所有receiver T + *T方法
匿名嵌入S, T方法集包含了所有 receiver S方法
匿名嵌入*S, T方法集包含了所有receiver S + *S方法
匿名嵌入S或*S, *T方法集包含了所有receiver S+ *S方法

src/learn/menth.go → src/learn/method.go 파일 보기


+ 33
- 0
src/learn/methodSet.go 파일 보기

@ -0,0 +1,33 @@
package main
import (
"fmt"
"reflect"
)
type S struct{}
type T struct {
S
}
func (S) sVal() {}
func (*S) sPtr() {}
func (T) tVal() {}
func (*T) tPtr() {}
func methodSet(I interface{}) {
t := reflect.TypeOf(I)
fmt.Println(t)
for i, n := 0, t.NumMethod(); i < n; i++ {
m := t.Method(i)
fmt.Println(m.Name, m.Type)
}
}
func main() {
var t T
methodSet(t)
println("-----------------")
methodSet(&t)
}

+ 53
- 0
src/learn/overMethod.go 파일 보기

@ -0,0 +1,53 @@
package main
type Str interface {
toStr()
add()
}
type user struct {
a int
b string
}
type manger struct {
*user
aa int
bb string
}
func (u user) toStr() {
println("IMY********user", u.a, " ", u.b)
}
func (u user) add() {
println("IMY********user222", u.a, " ", u.b)
}
func (m manger) toStr() {
println("IMY********manger")
}
func overa(s Str) {
println("TEST********", s)
s.toStr()
}
func overb(s Str) {
println("TEST********", s)
s.add()
}
func main() {
var m manger = manger{&user{22, "22uuuuuuuu"}, 1, "mmmmm"}
var u user = user{2, "uuuuuuuuu"}
u.toStr()
m.toStr()
overa(m)
overa(u)
overb(u)
overb(m)
}

불러오는 중...
취소
저장