Simbory

做我自己

第 4305 号会员 /

回复了 ssqq 创建的主题: 16进制字符串转换成数字

strconv.ParseInt(s string, base int, bitSize int)第二个参数base设置为0时,该函数会自动识别数字格式进行转换。以下是go语言源代码里面的注释:

If base == 0, the base is implied by the string's prefix: base 16 for "0x", base 8 for "0", and base 10 otherwise.

翻译一下:如果base为0,base的值会根据字符串s起始自动进行判断:如果字符串以0x开始,base=16;如果字符串以0开始base=8;以其他字符串开始base=10

回复了 uncleyang 创建的主题: 继承父类后,覆盖父类中的方法(父类调用子类方法)

只能是子结构体调用父结构体的方法,比如:

package main

type Animal struct {
}

func (a *Animal) Eat() {
    println("Animal eat")
}

type Cat struct {
    Animal
}

func (c *Cat) Eat() {
    println("Cat eat")
}

func main() {
    cat := Cat{}
    cat.Eat()
    cat.Animal.Eat()
}

输出结果为:

Cat eat
Animal eat

如果你要反过来了的话建议采用interface,将方法抽象出来。比如上面的代码可改为:

package main

type Eatable interface {
    Eat()
}

type Animal struct {
}

func (a *Animal) Eat() {
    println("Animal eat")
}

type Cat struct {
    Animal
}

func (c *Cat) Eat() {
    println("Cat eat")
}

func main() {
    var eatable Eatable
    eatable = &Animal{}
    eatable.Eat()

    eatable = &Cat{}
    eatable.Eat()
}

输出结果为:

Animal eat
Cat eat

回复了 fighter 创建的主题: var wg sync.WaitGroup wg.Add(1) wg为什么不需要初始化

struct是值类型,而WaitGroup明显是一个struct,你的这一句话var wg sync.WaitGroup就相当于var num int64。声明变量wg的时候就已经初始化并分配内存了。

如果你这样声明var wg *sync.WaitGroup就还需要加一句wg = &sync.WaitGroup{}

回复了 joeonly 创建的主题: 工厂方法该返回指针还是普通值,看了下面你可能就有自己的主意了

一般都是定义一个book的接口Book,然后在NewBook这个函数返回类型是这个接口,而不是指针更不是struct。看下面一段代码:

package main

type Book interface {
    SetName(string) Book
    GetName() string
}

type book struct {
    name string
}

func (this *book) GetName() string {
    return this.name
}

func (this *book) SetName(name string) Book {
    this.name = name
    return this
}

func NewBook(name string) Book {
    return &book{name}
}

func main() {
    println(book{"apple"}.name)
    println(NewBook("apple").GetName())
    x := NewBook("apple")
    x.SetName("new apple")
    println(x.GetName())
    println(NewBook("apple").SetName("ibm").GetName())
}

回复了 shuaixinga 创建的主题: 求推荐GO框架,不知道该研究哪个,最重要的是代码质量高,且碎片化轻量级.

推荐 wemvc:
https://github.com/Simbory/wemvc
有帮助开发的工具wetool:

  1. 获取工具
    go get github.com/Simbory/wetool
  2. 创建项目文件夹
    user@local:~/gopath/src/projects$ mkdir sample
  3. cd 到项目文件夹
    user@local:~/gopath/src/projects$ cd sample
  4. 初始化项目
    user@local:~/gopath/src/projects/sample$ wetool init
  5. 创建项目新的namespace
    user@local:~/gopath/src/projects/sample$ wetool ns admin
  6. 启用namespace: 在~/gopath/src/projects/sample/main.go文件中引入
    import _ “projects/sample/admin”
  7. 创建新的controller
    user@local:~/gopath/src/projects/sample$ wetool ctrl news
  8. 添加route规则:在~/gopath/src/projects/sample/controllers/init.go文件中添加路由
    wemvc.Route(“/news/<action=index>/<id=>“, NewsController{})
  9. 运行项目
    user@local:~/gopath/src/projects/sample$ go run main.go

回复了 ssqq 创建的主题: go 不支持类型别名

@ssqq 不要用面向对象的类的思维来理解golang的type
你可以试一试这段代码

package main

// Estr the alias of the type string
type Estr string

func f(s string) {
    println(s)
}

func main() {
    var s Estr = Estr("hello")
    f(string(s))
}