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”
正在研究这个…
更多关于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 main和package 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 main和package 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
}
在这个例子中:
First、Last和Age都是大写字母开头,因此它们是导出的字段。- 如果这些字段是小写(如
first、last、age),则只能在main包内部访问,其他包无法直接读取或修改。
这种机制是Go语言封装特性的核心部分,有助于控制对结构体数据的访问,提高代码的安全性和模块性。

