Golang中https://play.golang.org/p/vQs1J-MnZFE代码里大写字母的作用是什么

Golang中https://play.golang.org/p/vQs1J-MnZFE代码里大写字母的作用是什么 https://play.golang.org/p/vQs1J-MnZFE

具体来说: “First” “Last” “Age”

10 回复

正在研究这个…

更多关于Golang中https://play.golang.org/p/vQs1J-MnZFE代码里大写字母的作用是什么的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go 语言中,首字母大写的标识符表示它们可以被导出。这意味着可以从其他包中访问这些标识符。

我忘记了在终端中该做什么

不,这与包中的项是否能被其他包访问有关。 导入指定了您将使用的包。导出意味着您是否可以访问某个项(在其他编程语言中称为私有和公共访问)

// 代码示例
func main() {
    fmt.Println("hello world")
}

导入和导出的区别是什么?我很确定导入意味着我在程序中使用了一些预先编写好的包。那么导出是否意味着我将部分代码发送到某个地方?

以下是语言规范中的更多内容: https://golang.org/ref/spec#Exported_identifiers

不用担心我示例中的模块内容和文件名。我使用了 Go Playground,因为需要一种方式来回答你关于导入和导出的问题。

这提醒我要再次督促你学习使用终端(实际上是 Bash shell),这样你才能真正开始使用 Go。Playground 只是一个供玩耍的沙盒环境,其工作方式与实际编程环境不同。

在未先掌握相关支持知识的情况下学习 Go,就像先盖房子的第二层一样不切实际。

这里展示的是Go Playground示例中的三个文件。

这些文件是go.mod、say和say.go吗?

什么是模块playground?

import "playground/say" 

这很有趣。playground是一个包吗?say是该包中特定的部分?哦,你说"say"是一个包。

%s对我来说是新的

%s 字符串或切片的未解释字节(Go文档) 这里的"未解释"是什么意思?

fmt.Printf("Hello, ") 这里,你为什么使用Printf而不是Println?

我如何在golang.org上找到say包?

也许我需要一个关于包的准确定义。我用谷歌搜索了一下,我觉得我慢慢理解了。

“在那之后的部分”…你是指模块playground吗?

尝试在package mainpackage say中的任意一个或两个中将Hello()改为hello(),看看会发生什么…试过了。有趣!而且很有意思。

我想我现在就到这里吧。

再问一点…你能给我import和export的定义吗?

看看这个:https://play.golang.org/p/bOficacMcY9

它使用了Go Playground的一项新功能。现在你可以包含多个源代码文件。当你看到

-- go.mod --

后面的部分通常会放在名为go.mod的文件中,直到你看到

-- say/say.go --

后面的部分会放在名为say的目录(文件夹)内名为say.go的文件中。所以这个Go Playground示例中展示了三个文件。

say.go中,定义了另一个名为say的包。其中包含两个函数:Hello()Name()。要从package main中使用它们,需要如示例所示将函数名首字母大写。

package main中,需要使用import语句来访问package say,然后就可以通过say.Hello()say.Name()的方式调用该包中的函数。

尝试在package mainpackage say中将Hello()改为hello(),看看会发生什么。

package main中,通过使用import语句来导入package say

package say中,通过将函数名首字母大写来导出函数。除了函数之外,包中还可以导出其他内容。

在Go语言中,标识符(如变量名、函数名、结构体字段名)的首字母大小写决定了其可见性(即可访问性)。大写字母开头的标识符是导出的(public),可以被其他包访问;小写字母开头的标识符是未导出的(private),仅在同一包内可访问。

在提供的代码链接中(https://play.golang.org/p/vQs1J-MnZFE),“First”、“Last” 和 “Age” 是结构体字段名,以大写字母开头,表示这些字段是导出的。这意味着当在其他包中导入该结构体时,可以直接访问和修改这些字段。

示例代码解释: 假设我们有一个结构体定义如下(基于链接中的代码推断):

package main

import "fmt"

type Person struct {
    First string // 导出字段,可被其他包访问
    Last  string // 导出字段
    Age   int    // 导出字段
}

func main() {
    p := Person{
        First: "John",
        Last:  "Doe",
        Age:   30,
    }
    fmt.Println(p.First, p.Last, p.Age) // 输出: John Doe 30
}

在这个例子中:

  • FirstLastAge 都是大写字母开头,因此它们是导出的字段。
  • 如果这些字段是小写(如 firstlastage),则只能在 main 包内部访问,其他包无法直接读取或修改。

这种机制是Go语言封装特性的核心部分,有助于控制对结构体数据的访问,提高代码的安全性和模块性。

回到顶部