2010-03-05 2 views
4

Я запутался, почему линия 15 не действует. Почему не может быть указатель на большой. Не разыменовываться, в то время как указатель на int может?разыменования указателей в Go

package main 

import (
    "fmt" 
    "big" 
) 

func main() { 
    var c *int = getPtr() 
    fmt.Println(c) 
    fmt.Println(*c) 

    var d *big.Int = big.NewInt(int64(0)) 
    fmt.Println(d) 

    // does not compile - implicit assignment of big.Int 
    // field 'neg' in function argument 
    //fmt.Println(*d) 
} 

func getPtr() *int { 
    var a int = 0 
    var b *int = &a 
    return b 
}
+0

Выход 0x110480 (адрес с) 0 (значение с) 0 (результат d.String() Я принимаю) – Dijkstra

ответ

5

Это потому, что Int является структурой с невыдвинутыми полями. Когда вы передаете структуру по значению функции, вы делаете ее копию. Go spec утверждает, что для этого, чтобы быть законным

... либо все поля T должны быть экспортированы , или присвоение должно быть в тот же пакет, в котором Т объявлена. Другими слова, значение структуры может быть присвоено переменной структура только тогда, когда каждое поле структуры может быть юридически присвоенным индивидуален по программе.

Смежные вопросы