重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。
成都创新互联是一家专注于成都做网站、成都网站建设、成都外贸网站建设与策划设计,岳阳县网站建设哪家好?成都创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:岳阳县等地区。岳阳县做网站价格咨询:13518219792
定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。
new 函数返回一个指针变量
fmt.scan() 就是传入一个指针变量。
两种方法都可以使用。
以上简要介绍了go语言中的指针和结构体。
golang方法(method)返回值提取结构体(struct)取不到地址的原因是,①返回值并没有保存到变量中,返回值本身只是临时保存在程序运行的堆栈的某个不确定位置,不能取地址;②实参取地址用的操作符是是,而形参声明变量类型为指针,需要地址值用的才是*;③声明形参为指针的参数的实参只能为地址值。
故先把修改后的代码列出,修改要点是把“*NewPerson1().Speak()”改为“var b=NewPerson1();(b).Speak()”,同时把“NewPerson2().Speak()”改成“var a=NewPerson2();(a).Speak()”,代码列出如下:
package main;
import "fmt";
type PersonA struct{
name string
}
func (p *PersonA) Speak () {
fmt.Println ( "person speak" ,p.name)
}
func (p PersonA) Walk ( ){
fmt . Println ( "person walk",p.name)}
func NewPerson1()(p PersonA){
return PersonA{"new Person1"}}
func NewPerson2()(p PersonA){
return PersonA{"new Person2"}}
func main () {
var a=NewPerson2 (); (a).Speak ();
a .Walk ();
fmt. Println ("--------------------") ;
var b=NewPerson1 ();(b).Speak ();
b.Walk ()}
go代码调试效果
关于指针变量的使用这一点go语言和其他有指针的程序语言如c语言是一样的,从来只有返回值为地址/指针,而从没有在赋值前给返回值取地址这种运算,类似的错误晚点再整理。
不一样的是,go语言更简单go语言函数可以使用结构体或者结构体的指针(pointer)以传递结构体参数,而且和c语言不一样的是,go语言没有区分结构体指针和结构体访问成员的运算符,go语言只有“.”适用于两种情况,而没有c语言为结构体指针专门准备的“-”运算符。
可以使用结构体指针,作为结构体的方法的参数以指代自身吗,
这个是根据你值的内容来定的啊,看代码
type User struct {
Name string
}
//例1(返回指针)
func test1()*User{
return new(User)
}
//例2(返回指针)
func test2()*User{
return User{}
}
//例3(返回值)
func test3()User{
return User{}
}
明白没有?