Go 语言程序设计——面向对象编程(4)

2019-08-11  本文已影响0人  hlemon

接口(2)

type StringPair struct { first, second string }

func (pair *StringPair) Exchange() {
  pair.first, pair.second = pair.second, pair.first
}

type Point [2]int
func (point *Point) Exchange() { point[0], point[1] = point[1], point[0] }
func (pair StringPair) String() string {
  return fmt.Sprintf("%q + %q", pair.first, pair.second)
}

接口嵌入

type LowerCaser interface {
  LowerCase()
}

type UpperCaser interface {
  UpperCase()
}

type LowerUpperCaser interface {
  LowerCaser
  UpperCaser
}
type FixCaser interface {
  FixCase()
}
type ChangeCaser interface {
  LowerUpperCaser
  FixCaser
}
func (part *Part) FixCase() {
  part.Name = fixCase(part.Name)
}

func fixCase(s string) string {
  var chars []rune
  upper := true
  for _, char := range s {
    if upper {
      char = unicode.ToUpper(char)
    } else {
      char = unicode.ToLower(char)
    }
    chars = append(chars, char)
    upper = unicode.IsSpace(char) || unicode.Is(unicode.Hyphen, char)
  }
  return string(chars)
}

func (pair *StringPair) UpperCase() {
  pair.first = strings.ToUpper(pair.first)
  pair.second = strings.ToUpper(pair.second)
}

func (pair *StringPair) FixCase() {
  pair.first = fixCase(pair.first)
  pair.second = fixCase(pair.second)
}
type IsValider interface {
  IsValid() bool
}

if thing, ok := x.(IsValider); ok {
  if !thing.IsValid(){
    reportInvalid(thing)
  } else {
    //...处理有效的thing...
  }
}
上一篇 下一篇

猜你喜欢

热点阅读