douxianwu2221 2014-02-15 23:10
浏览 570
已采纳

如何在Go中创建自定义类型元素的自定义类型数组?

I'm attempting to create a person with a name and salary, then an array of persons. The error I get at "data[0] = a" states: "cannot use a (type person) as type *person in assignment." Is there some sort of casting I need to do, as in Java?

package main

import "fmt"

type person struct {
    name   string
    salary float64
}

type people []*person

func main() {

    var data = make(people, 10)

    var a person
    var b person
    a.name = "John Smith"
    a.salary = 74000
    b.name = "Jane Smith"
    b.salary = 82000

    data[0] = a
    data[1] = b

    fmt.Print(data)
}
  • 写回答

1条回答 默认 最新

  • douqingnao9246 2014-02-15 23:20
    关注

    You construct slice of pointers to person. That's why you should take pointer of you a and b.

    package main
    
    import "fmt"
    
    type person struct {
        name   string
        salary float64
    }
    
    type people []*person
    
    func main() {
        var data = make(people, 10)
    
        var a person
        var b person
        a.name = "John Smith"
        a.salary = 74000
        b.name = "Jane Smith"
        b.salary = 82000
    
        data[0] = &a
        data[1] = &b
    
        fmt.Print(data)
    }
    

    Alternative approach is to define a and b as pointers to structs.

    package main
    
    import "fmt"
    
    type person struct {
        name   string
        salary float64
    }
    
    type people []*person
    
    func main() {
        var data = make(people, 10)
        a := &person{}
        b := &person{}
    
        a.name = "John Smith"
        a.salary = 74000
        b.name = "Jane Smith"
        b.salary = 82000
    
        data[0] = a
        data[1] = b
    
        fmt.Print(data)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大