从结构内部获取指向float32的指针的值?

时间:2018-05-26 03:49:03

标签: go

我从数据库中提取一些数据 - 我有一个指向float32的指针 - 因为如果我使用指针 - 那么我可以检查它是否为nil(通常可能是这样)。

当它不是nil时,我想获得值 - 我如何取消引用它以便我可以得到实际的float32?我实际上找不到任何链接!我确切地知道我想要做什么,而我在Go中找不到语法,我仍然很新 - 所有帮助都很感激。

我知道如果它是一个直接的float32 ...

,如何取消引用指针

但如果我有以下结构...

if myAwesomeType.Value == nil{
    // Handle the error later, I don't care about this yet...
} else{
    /* What do I do here? Normally if it were a straight float32
     * pointer, you might just do &ptr or whatever, but I am so
     * confused about how to get this out of my struct...
    */
}

然后我做了:

(defun nSum (n sum) 
(if ( n =  0) ( sum) ) 
(cond (  (mod n 5) =  0) ( nSum ( - n 1) (+ sum n)) (  (mod n 3) =  0) (nSum(- n 1) (+ sum n)) (nSum (- n  1) (+ sum n))  
 )
 )
(setq sum (nSum 100 0))
(write sum)

1 个答案:

答案 0 :(得分:3)

  

The Go Programming Language Specification

     

Address operators

     

对于指针类型* T的操作数x,指针间接* x   表示由x指向的类型T的变量。如果x为零,则为   尝试评估* x会导致运行时恐慌。

使用*运算符。例如,

package main

import "fmt"

type MyAwesomeType struct {
    Value *float32
}

func main() {
    pi := float32(3.14159)
    myAwesomeType := MyAwesomeType{Value: &pi}

    if myAwesomeType.Value == nil {
        // Handle the error
    } else {
        value := *myAwesomeType.Value
        fmt.Println(value)
    }
}

游乐场:https://play.golang.org/p/8URumKoVl_t

输出:

3.14159

由于您是Go的新手,请A Tour of Go。这次旅行解释了许多事情,包括指针。

  

指针

     

Go有指针。指针保存值的内存地址。

     

类型*T是指向T值的指针。其零值为nil

var p *int
     

&运算符生成指向其操作数的指针。

i := 42
p = &i
     

*运算符表示指针的基础值。

fmt.Println(*p) // read i through the pointer p
*p = 21         // set i through the pointer p
     

这被称为"解除引用"或"间接"。

     

与C不同,Go没有指针算法。