2

如果我有

// types.go

type S string

func (s *S) Lower() *S {
    *s = S(strings.ToLower(string(*s)))
    return s
}

`

// in another file

import "u/types"

func main() {
    s := types.S("asdf")
    if s == "asdf" {
        s.Lower()
    }
}
  1. 有没有办法将 types.S("asdf") 缩短为 S("asdf")?

  2. 有没有办法将其他文件中的方法调用小写?egsLower() => s.lower()?

4

2 回答 2

13

在大多数情况下不建议这样做,但您可以这样做import . "u/types",然后全部跳过类型前缀。.会将所有公共符号导入您的包中,以便您调用它们,就好像它们在您的包中一样。

于 2013-08-11T22:45:39.943 回答
0
  1. 只要该类型位于与您使用它的位置不同的包中,而不使用点导入。

  2. 是的,如果另一个文件仍在同一个包中。否则,不,因为那样函数将不会被导出(对其他包可见)。这是 Go 约定。

于 2013-08-11T22:31:17.823 回答