Golang 学习笔记 杂记
运行golang并雜記所思所想,将可能较大的内容另外整理成文章。
听说静态分析很方便。
静态分析是指
一个能够整理代码而无需执行的人士
根据所了解,golang本身就是以简洁代码为目标,方便进行静态分析
似乎与静态分析相得益彰。
来源:https://golang.org/doc/faq#change_from_c
其次,该语言的设计考虑了易于分析的特点,可以在没有符号表的情况下进行解析。
格式
公式提供的格式化工具。
在文件保存时,会自动对源代码进行格式化。
执行此任务的是
-
- 行間のフォーマット
-
- 変数、型のインデント揃え
-
- 不要(ソース内未使用)パッケージの削除
-
- 制御構文の()削除※
- ※golangはif,switch,forの制御構文に()は利用しない

这里有关于fmt和go格式的详细信息
命令go fmt
《Effective Go》
在代码中写下我打算使用的自己制作的包,并且如果我没有在代码中使用它而保存它的话,它就会消失,这让我有点难过。
衣服上的绒毛

-
- 構造体へのコメント付与
- パブリック関数へのコメント付与
兽医
可以检测死代码。
我觉得默认情况下并没有包含。
还未开始。
package的处理
暫時先創建多個源代碼文件並運行,所以我做了這樣的目錄結構。gogo.go用於通訊確認,person.go則用於結構體的測試,它們是相互獨立的源代碼文件。
golang
├gogo.go
└person.go
“Go”是一种棋类游戏。
-
- 少なくとも1つのpackageに所属する必要がある
- コンパイル→実行時にpackage mainのmain関数を実行する

如果像运行person.go的方式指定文件名进行执行,
虽然基本上可以执行,但有些不舒服。
对于必须要归属于包的语言,应该如何进行整理才是正确的解决方案。
将每个要创建的源文件分别打包成包,并将main.go文件中的源文件调用形式修改为调用包的形式。
golang
├main.go
├hello
│└gogo.go
└person
└person.go
package main
import "./person"
import "fmt"
func main() {
fmt.Println("start")
person.score()
}
package person
import (
"fmt"
)
// Person はテストの点数管理の構造体です。
type Person struct {
name string
english int
}
func score() {
bob := Person{"Bob", 60}
fmt.Println(bob.name, bob.english)
if bob.english > 60 {
fmt.Println("OK")
} else {
fmt.Println("NG")
}
}
我以为这样可以从main.go导入我的自定义包person,但是没有找到它并且被删除了…
在调查之后,发现在Golang中,如果方法名是小写字母,则将其设置为私有(非公开)的,如果方法名是大写字母,则将其设置为公开的。关于这方面的设置在官方文档中吗?
如果你有一个名为owner的字段(小写,未导出),getter方法应该被称为Owner(大写,已导出),而不是GetOwner。使用大写名称来进行导出提供了将字段与方法区分开的方式。
将以下方法名改为大写后,成功运行。
由于在自身代码中即使使用小写也可以引用,所以没有出现错误,导致原因的解释花费了一些时间。
package main
import (
"fmt"
"./person"
)
func main() {
fmt.Println("start")
person.Score()
}
package person
import (
"fmt"
)
// Person はテストの点数管理の構造体です。
type Person struct {
name string
english int
}
// Score 評価のためのメソッド
func Score() {
bob := Person{"Bob", 60}
fmt.Println(bob.name, bob.english)
if bob.english > 60 {
fmt.Println("OK")
} else {
fmt.Println("NG")
}
}
go run main.go
start
Bob 60
NG
参考文件
-
- golang公式
- Go Codereview Comments(日本語訳)