Golang中无法通过(:=)给结构体切片数据类型赋值的问题

Golang中无法通过(:=)给结构体切片数据类型赋值的问题

package main

import "fmt"

type Hospital struct {
    name1 string
    phone int
}
type Doctors struct {
    Hospital
    id       int
    name     string
    patients []string
}

func main() {
    doc := Doctors{}
    var
    doc.name1 = "Govt"
    doc.phone = 123456
    doc.id = 11
    doc.name = "tinq"
    doc.patients :=[]string{"Jone","David"}

    How to assingn a value for patients field?

    Getting this error:
    ./prog.go:24:2: non-name doc.patients on left side of :=

如何为 patients 字段赋值?

出现此错误: ./prog.go:24:2: := 左侧的 doc.patients 不是名称


更多关于Golang中无法通过(:=)给结构体切片数据类型赋值的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

谢谢

更多关于Golang中无法通过(:=)给结构体切片数据类型赋值的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您应该在提到的地方使用 = 而不是 :=

同时,请使用正确的代码块格式,可以通过缩进或代码围栏来实现。

或者,您也可以选中代码,然后点击工具栏中的 </> 图标。

在Go语言中,:= 是声明并赋值的短变量声明语法,只能用于声明新变量,不能用于已存在变量的字段赋值。对于结构体字段的赋值,应该使用 = 运算符。

以下是修正后的代码:

package main

import "fmt"

type Hospital struct {
    name1 string
    phone int
}
type Doctors struct {
    Hospital
    id       int
    name     string
    patients []string
}

func main() {
    doc := Doctors{}
    doc.name1 = "Govt"
    doc.phone = 123456
    doc.id = 11
    doc.name = "tinq"
    doc.patients = []string{"Jone", "David"}
    
    fmt.Printf("%+v\n", doc)
}

或者,你也可以在创建结构体实例时直接初始化所有字段:

func main() {
    doc := Doctors{
        Hospital: Hospital{
            name1: "Govt",
            phone: 123456,
        },
        id:       11,
        name:     "tinq",
        patients: []string{"Jone", "David"},
    }
    
    fmt.Printf("%+v\n", doc)
}

如果你需要后续追加元素到切片字段,可以这样做:

func main() {
    doc := Doctors{}
    doc.patients = []string{"Jone", "David"}
    
    // 追加新元素
    doc.patients = append(doc.patients, "Alice", "Bob")
    
    fmt.Printf("%+v\n", doc)
}

错误信息 “non-name doc.patients on left side of :=” 的意思是 := 左侧的 doc.patients 不是一个变量名,而是一个结构体字段的访问表达式。:= 只能用于声明新变量,不能用于给已存在的变量或字段赋值。

回到顶部