刚学go,为什么这么写会报错?

package main

import(
    "fmt"
)

type person struct {
    name string
    age int
}

var P person

P.name = "annie"
P.age = 20

func main() {
    fmt.Printf("The person's name is %s", P.name)
}

报错信息:/struct.go:14: syntax error: non-declaration statement outside function body

阅读 19.2k
5 个回答

你非得在main函数外赋值的话,要这样写

package main

import(
    "fmt"
)

type person struct {
    name string
    age int
}

var P =person{"annie",20}


func main() {
    fmt.Printf("The person's name is %s", P.name)
}

要不然就得这样写

package main

import(
    "fmt"
)

type person struct {
    name string
    age int
}

var P person


func main() {
    P.name="a"
    P.age=10
    fmt.Printf("The person's name is %s", P.name)
}

你copy这个试试

package main

import (
    "fmt"
)

type person struct {
    name string
    age  int
}

func main() {
    var P person
    P.name = "annie"
    P.age = 20
    fmt.Printf("The person's name is %s", P.name)
}

要在main函数中写声明语句

全局变量初始化只初始化一次 且如果不指定则初始化为零值 也就是说

var P person // 这边已经完成了初始化
// 是不是下面在进行赋值操作就不大行了

go不支持在函数外赋值与调用操作, 但可以声明一个变量或者声明并初始化一个变量。

var i string = "golang"
var age int

/*
age = 20   // syntax error: non-declaration statement outside function body
*/

func main() {
    fmt.Println(i, age)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏