d.PointerTest()可以执行,,而 Data{x:6}.PointerTest()报错,这是什么情况?

aaaa · 2023-04-01 04:40:19 · 3904 次点击 · 预计阅读时间不到 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2023-04-01 04:40:19 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import "fmt"

type Data struct {
    x int
}

func (self *Data) PointerTest() { 
    fmt.Printf("Pointer: %p\n", self)
}
func main() {
    d := Data{x: 6}
    d.PointerTest()//这句可以执行

    //Data{x:6}.PointerTest()  //这句报错

}

d.PointerTest()可以执行,,而 Data{x:6}.PointerTest()报错,这是什么情况


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3904 次点击  
加入收藏 微博
4 回复  |  直到 2023-05-06 18:03:12
Neightly
Neightly · #1 · 2年之前

d可寻址,Data{x:6}不可以。

aaaa
aaaa · #2 · 2年之前
NeightlyNeightly #1 回复

`d`可寻址,`Data{x:6}`不可以。

确实是,因为是字面量,字面量是没地址的

cqcsdzmt
cqcsdzmt · #3 · 2年之前

字面量也有地址的。试试这个: (&Data{x: 6}).PointerTest()

因为&优先级低,所以加括号。

Neightly
Neightly · #4 · 2年之前

As an exception to the addressability requirement, x may also be a (possibly parenthesized) composite literal.

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传