stevewang

第 1556 号会员 /

回复了 stevenldj 创建的主题: 下面的代码,注释的地方为什么不能执行呢?

因为Base(a).Method2()里,Base(a)是个临时对象,而Method2的receiver是指针类型,对于临时对象不能取地址。
Base(a).Method1()可以编译是因为Method1的receiver不是指针。
b.Method2()可以编译是因为b不是临时对象。

同理,以下代码编译错误:

type T struct{}
func (*T) f() {}
(T{}).f()

回复了 chenhao 创建的主题: 如何解耦循环依赖

package a

type Interface interface {
    Fun()
}

type A struct {
}

func (this *A) Fun(v Interface) {
    v.Fun()
}
package b

import "a"

type B struct {
}

func (this *B) f1() {
    p := new(a.A)
    p.Fun(this)
}

func (this *B) Fun() {
}

回复了 CrossRun 创建的主题: 请怎么序列化小写的属性

a如果不导出,json包就看不到,怎么做序列化呢?
你可以另外定义一个类似的struct用于json序列化。

回复了 novtopro 创建的主题: [新手问题]JSON Unmarshal的问题

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type IntBool bool

func (p *IntBool) UnmarshalJSON(b []byte) error {
    str := string(b)
    switch str {
    case "1":
        *p = true
    case "0":
        *p = false
    default:
        return fmt.Errorf("unexpected bool: %s", str)
    }
    return nil
}

func main() {
    var account struct {
        Gender IntBool `json:"gender"`
    }
    err := json.Unmarshal([]byte(`{"gender":1}`), &account)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(account.Gender == true)
}

回复了 lizon 创建的主题: 有关两个接口内函数名冲突的问题

type I1 interface {
    F()
}
type I2 interface {
    F(int)
}

type T struct {
}
func (*T) F() {
}

type T2 T
func (*T2) F(int) {
}

func main() {
    var t T
    var i1 I1 = &t
    var i2 I2 = (*T2)(&t)
    i1.F()
    i2.F(0)
}

回复了 axengine 创建的主题: 设计模式单例疑问

func (p *Music) Manage() {
    p.Manage() // 递归调用自身导致栈溢出。应该是p.m.Manage()?
}