Golang 学习笔记 杂记

运行golang并雜記所思所想,将可能较大的内容另外整理成文章。

听说静态分析很方便。

静态分析是指

一个能够整理代码而无需执行的人士
根据所了解,golang本身就是以简洁代码为目标,方便进行静态分析
似乎与静态分析相得益彰。
来源:https://golang.org/doc/faq#change_from_c

其次,该语言的设计考虑了易于分析的特点,可以在没有符号表的情况下进行解析。

格式

公式提供的格式化工具。
在文件保存时,会自动对源代码进行格式化。
执行此任务的是

    • 行間のフォーマット

 

    • 変数、型のインデント揃え

 

    • 不要(ソース内未使用)パッケージの削除

 

    • 制御構文の()削除※

 

    ※golangはif,switch,forの制御構文に()は利用しない
ezgif-3-89c5e65aac7a.gif

这里有关于fmt和go格式的详细信息
命令go fmt
《Effective Go》

在代码中写下我打算使用的自己制作的包,并且如果我没有在代码中使用它而保存它的话,它就会消失,这让我有点难过。

衣服上的绒毛

image.png
    • 構造体へのコメント付与

 

    パブリック関数へのコメント付与

兽医

可以检测死代码。
我觉得默认情况下并没有包含。
还未开始。

package的处理

暫時先創建多個源代碼文件並運行,所以我做了這樣的目錄結構。gogo.go用於通訊確認,person.go則用於結構體的測試,它們是相互獨立的源代碼文件。

golang
├gogo.go
└person.go

“Go”是一种棋类游戏。

    • 少なくとも1つのpackageに所属する必要がある

 

    コンパイル→実行時にpackage mainのmain関数を実行する
image.png

如果像运行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(日本語訳)
bannerAds