Golang中解决[]employee类型未定义name字段或方法的问题

Golang中解决[]employee类型未定义name字段或方法的问题 下面的变量声明示例没有继承结构体的字段或方法。 如何重新表述,以便在保留 append 的同时访问结构体内部的字段?下面是一个示例。 提前感谢。

package main

import "fmt"

type employee struct {
    name   string
    last string
}

func main() {
   emp := []employee{}
   emp = append(emp, employee{name: "Sam", last: "Fish"})
    fmt.Printf("name is: %s\n", emp.name)
}

emp.name 未定义(类型 []employee 没有字段或方法 name)


更多关于Golang中解决[]employee类型未定义name字段或方法的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

哦。谢谢。

更多关于Golang中解决[]employee类型未定义name字段或方法的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


emp 是一个切片而非结构体,因此需要通过索引来访问其中的信息。所以,将 emp.name 改为 emp[0].name

这是一个常见的切片操作问题。emp[]employee 类型(切片),而不是单个 employee 结构体。要访问结构体字段,你需要指定切片中的具体元素索引。

以下是修正后的代码:

package main

import "fmt"

type employee struct {
    name string
    last string
}

func main() {
    emp := []employee{}
    emp = append(emp, employee{name: "Sam", last: "Fish"})
    
    // 访问第一个元素的name字段
    fmt.Printf("name is: %s\n", emp[0].name)
    
    // 或者遍历所有元素
    for i, e := range emp {
        fmt.Printf("Employee %d: %s %s\n", i, e.name, e.last)
    }
}

如果你需要访问所有元素的name字段,可以使用循环:

// 只打印所有员工的name
for _, e := range emp {
    fmt.Printf("name is: %s\n", e.name)
}

或者如果你只需要第一个元素的name:

if len(emp) > 0 {
    fmt.Printf("First employee name: %s\n", emp[0].name)
}

关键点是:emp 是切片,emp[0]emp[i] 才是具体的 employee 结构体实例,只有结构体实例才有 name 字段。

回到顶部