Golang中这段代码的理解求助

Golang中这段代码的理解求助 gopher-go-file-to-be-parsed

我不理解这段代码的作用……它出现在GolangUK Conference '17会议上。

我的理解是: 常量字符串“GOPHER”被传递给了gogopher,它是Gopher()的一个实例……

那么&Gopher{Gopher : “gopher”}是做什么的? json:"gopher"这个字符串的目的是什么?

非常感谢任何见解。


更多关于Golang中这段代码的理解求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

谢谢! 还有一个后续问题: 我可以在包含 parser.ParseFile 的文件中调用它自身吗?

更多关于Golang中这段代码的理解求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您可以在一个 filename 上调用 ParseFile。这当然可以是当前程序的 .go 源文件的文件名。

Arkaprabha_Majumdar:

&Gopher{Gopher : "gopher"} 的作用是什么?

请查看 Go 语言之旅

字符串 json:"gopher" 的目的是什么?

参见 Go by Example: JSON

这段代码定义了一个结构体类型 Gopher,并演示了结构体字段标签(struct tags)的用法。让我详细解释每个部分:

package main

import (
	"encoding/json"
	"fmt"
)

// 定义Gopher结构体
type Gopher struct {
	Gopher string `json:"gopher"`  // 字段标签,指定JSON序列化时的字段名
}

// gogopher函数接收一个Gopher类型的指针
func gogopher(g *Gopher) {
	fmt.Printf("Gopher value: %s\n", g.Gopher)
}

func main() {
	// 创建Gopher结构体实例
	g := &Gopher{Gopher: "gopher"}
	
	// 调用函数
	gogopher(g)
	
	// 演示JSON序列化
	data, _ := json.Marshal(g)
	fmt.Printf("JSON output: %s\n", string(data))
}

代码解析:

  1. 结构体定义:
type Gopher struct {
	Gopher string `json:"gopher"`
}
  • 定义了一个名为 Gopher 的结构体
  • 包含一个字段 Gopher(类型为string)
  • json:"gopher" 是字段标签(struct tag),指定JSON序列化时使用的字段名
  1. &Gopher{Gopher: "gopher"} 的作用:
g := &Gopher{Gopher: "gopher"}
  • 创建 Gopher 结构体的实例
  • 使用结构体字面量初始化,将字段 Gopher 的值设为 "gopher"
  • & 操作符获取结构体的指针
  • 相当于:先创建实例,然后取地址
  1. 字段标签 json:"gopher" 的目的:
// 序列化时,字段名会从"Gopher"改为"gopher"
jsonData := `{"gopher":"gopher"}`  // 而不是 {"Gopher":"gopher"}

// 反序列化示例:
var g2 Gopher
json.Unmarshal([]byte(`{"gopher":"new value"}`), &g2)
fmt.Println(g2.Gopher) // 输出: new value

运行结果:

Gopher value: gopher
JSON output: {"gopher":"gopher"}

关键点:

  • 结构体字段名 Gopher 是Go代码中使用的名称
  • 字段标签 json:"gopher" 指定了JSON序列化/反序列化时使用的字段名
  • 这种设计允许Go代码使用大写开头的字段名(可导出),同时在JSON中使用小写字段名
  • &Gopher{Gopher: "gopher"} 创建了一个指向初始化结构体的指针
回到顶部