先上代码
package main
import "fmt"
type Simpler interface {
Get() int
Set(int)
}
type Simple struct {
int
}
func (s *Simple) Get() int {
return s.int
}
func (s *Simple) Set(a int) {
s.int = a
}
func SetAndGet(ls Simpler) int {
ls.Set(11111)
return ls.Get()
}
func main() {
s := new(Simple)
fmt.Println(SetAndGet(s))//fmt.Println(SetAndGet(*s))则会报错 输出1111
var bs Simple
// fmt.Println(SetAndGet(ns))会报错
fmt.Println(SetAndGet(*bs)) 输出11111
}
首先,你提供的代码无法运行!
其次,
new 是golang的 buildin function 定义如下:
它的作用是给一个类型分配内存,并返回指向这个类型的指针。
而直接声明一个类型虽然也分配了内存,但是返回的不是指针
所以你的代码最后一句应该是: