golang - new方法和声明一个类型有什么区别
本文介绍了golang - new方法和声明一个类型有什么区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
先上代码
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 定义如下:
func new(Type) *Type
它的作用是给一个类型分配内存,并返回指向这个类型的指针。
而直接声明一个类型虽然也分配了内存,但是返回的不是指针
所以你的代码最后一句应该是:
fmt.Println(SetAndGet(&bs)) // 输出11111
这篇关于golang - new方法和声明一个类型有什么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文