我很好奇为什么只在var上打印内存地址就可以直接使用,但是尝试通过接口执行相同的操作却不能打印出内存地址?
package main
import "fmt"
type address struct {
a int
}
type this interface {
memory()
}
func (ad address) memory() {
fmt.Println("a - ", ad)
fmt.Println("a's memory address --> ", &ad)
}
func main() {
ad := 43
fmt.Println("a - ", ad)
fmt.Println("a's memory address --> ", &ad)
//code init in here
thisAddress := address{
a: 42,
}
// not sure why this doesnt return memory address as well?
var i this
i = thisAddress
i.memory()
}
https://play.golang.org/p/Ko8sEVfehv
只是想在修复错误后添加它,它现在可以正常运行。测试移位内存指针
package main
import "fmt"
type address struct {
a int
}
type this interface {
memory() *int
}
func (ad address) memory() *int {
/*reflect.ValueOf(&ad).Pointer() research laws of reflection */
var b = &ad.a
return b
}
func main() {
thisAddress := address{
a: 42,
}
thatAddress := address{
a: 43,
}
var i this
i = thisAddress
a := i.memory()
fmt.Println("I am retruned", a)
fmt.Println("I am retruned", *a)
i = thatAddress
c := i.memory()
fmt.Println("I am retruned", c)
fmt.Println("I am retruned", *c)
}
https://play.golang.org/p/BnB14-yX8B
因为在memory()
方法第二种情况下:
func (ad address) memory() {
fmt.Println("a - ", ad)
fmt.Println("a's memory address --> ", &ad)
}
ad
不是一个int
而是一个结构,ad
是类型的address
。而且您不是在打印的地址,int
而是在打印的地址struct
。指向结构体的指针的默认格式为:&{}
。
从软件包文档中引用fmt
有关默认格式的信息:
struct: {field0 field1 ...} array, slice: [elem0 elem1 ...] maps: map[key1:value1 key2:value2] pointer to above: &{}, &[], &map[]
如果您修改该行以打印以下address.a
类型的字段的地址int
:
fmt.Println("a's memory address --> ", &ad.a)
您将看到以十六进制格式打印的相同指针格式,例如:
a's memory address --> 0x1040e13c
问题内容: 我有一些C方面的经验,对golang完全陌生。 现在在golang slice中是array的引用,其中包含指向slice的数组len和slice的上限的指针,但是该slice也将分配在内存中,我想打印该内存的地址。但是无法做到这一点。 问题答案: http://golang.org/pkg/fmt/ 将打印地址。
问题内容: 为什么地图打印混乱,如何使它秩序井然? 打印输出: 问题答案: 码: (其中大部分是从萨默菲尔德先生的书中偷走的) 输出:
问题内容: 无论如何,是否可以使用新的Swift语言从Objective-C 模拟? 例如: 问题答案: 现在,它已成为标准库的一部分:。 迅捷3 对于Swift 3,请使用:
#include <stdio.h> int main(void) { int i = 0; char a[100]; for (i = 0; i < sizeof(a); i++) { a[i] = i; } return 0; } 技巧 gdb中使用“x”命令
问题内容: 我正在尝试打印地图的类型,例如:map [int] string 所以如果我这样做: 我想得到 但我找不到正确的电话。 问题答案: 尽量不要使用。但是,如果您必须使用: 甲值具有函数,该函数返回一个值。 如果该类型为,则这是某些类型T1和T2 的type值,其中T1是键类型,T2是元素类型。 因此,在使用时,我们可以像这样将片段分开: 在Go Playground上查看更完整的示例 。
问题内容: 我有以下练习: 如果是工作日,则参数weekday为True,如果我们在假期,则参数Vacation为True。如果不是工作日,或者我们正在休假,我们会入睡。如果我们入睡,则返回True。 这是我所做的,但是第二个打印功能仅打印。 输出: 问题答案: 除非明确指示否则python中的函数会返回。 在上面的函数中,您没有考虑工作日为的情况。解释器到达函数的末尾而没有读取return语句(