Go语言学习笔记-创建一个Go项目
目录
一、创建一个项目
二、引入其他包
三、代码组织方式
1、创建函数
2、函数文件
3、不同目录的函数
有感于十天半月不用Go语言,连项目都不会创建了,所以也写一篇创建Go项目的blog!
使用Go项目的好处:
1、对于编译结果在各个平台可以直接运行,比如在windows平台直接把项目打包成exe文件。
2、编译速度快。有的项目之所以喜欢采用跨平台语言(java),一个原因就是跨平台语言不用多次编译,一次编译,跨平台运行。但是对于那些容易编译的项目来说,用户直接拿来运行,反而更加方便。至于如何打包成对应平台的应用,那是开发者的事情。
3、Go是一门热门语言。有学习价值。
一、创建一个项目
1、创建一个目录。比如:mkdir goproject
2、进入goproject目录
3、运行命令:go mod init yy.cn/main
这些这个命令会生成一个go.mod的文件。
4、创建一个go文件:main.go
输入:
package mainfunc main() {println("hi")
}
5、运行命令:go run .
成功打印:hi
二、引入其他包
1、在网络上找到对应的包。比如:
go get -u github.com/gocolly/colly/...
执行这个命令,go.mod文件会多出require一些东西。
可以使用go mod tidy整理go.mod的依赖,清理掉一些没有使用的依赖。
2、编写代码:
package mainimport ("fmt""github.com/gocolly/colly"
)func main() {c := colly.NewCollector()// Find and visit all linksc.OnHTML("a[href]", func(e *colly.HTMLElement) {e.Request.Visit(e.Attr("href"))})c.OnRequest(func(r *colly.Request) {fmt.Println("Visiting", r.URL)})c.Visit("http://www.baidu.com/")
}
3、思考:
代码的例子如何来?
答:从官方文档,博客,书本等等地方来。
如何编写符合自己业务要求的代码?
答:查找官方文档等等方式,按照业务逻辑改造代码。
如何改进代码变成适合自己的形状?
答:按照功能,或者某种体系来组织代码。尽量不要按照特定业务逻辑来抽象代码,标准是如果一段时间后,自己已经不写这种业务后,再来看代码,依然能快速知道代码的抽象逻辑、原则。
三、代码组织方式
如果把代码全都挤在一坨,肯定不好,所以需要抽象成函数。而一大坨函数放在一起,同样难以管理,所以需要把和一个主题相关的一系列函数组织在一个单独的文件中。而如果所有的函数文件全在一个目录下面,也会让人眼花缭乱,这时候就可以把不同函数文件放在一个目录树下的其他目录里面。
1、创建函数
一个简单函数:
func fun1(){println("hi")
}
2、函数文件
在同一目录下,新建一个.go文件,然后在文件中编写函数。在同一个目录下的go文件即可互相引用函数。
3、创建子项目
(这个操作本身比较简单,但是VScode在.go文件保存的时候,总是会清除掉爆红的import语句。这个麻烦问题暂时没有好办法,一个简单的办法是模仿学习网站提供的示例编写import。Call your code from another module - The Go Programming Language)
也可以叫子项目。如果想要引用这类函数,需要做一些配置。要点是,在.go文件中编写import语句后,使用go mod tidy生成require指令。不要自己写require指令。
1)先创建一个子目录(项目)。比如:greetings
2)运行:go mod init example.com/greetings
生成go.mod文件。
3)新增greetings.go文件:
package greetingsimport "fmt"// Hello returns a greeting for the named person.
func Hello(name string) string {// Return a greeting that embeds the name in a message.message := fmt.Sprintf("Hi, %v. Welcome!", name)return message
}
4)在想要引入greetings的项目的.go文件中,使用import。
import example.com/greetings
package mainimport ("fmt""example.com/greetings"
)func main() {// Get a greeting message and print it.message := greetings.Hello("Gladys")fmt.Println(message)
}
5)运行:go mod tidy
会打印类似这个:go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000
即在go.mod文件中生成require命令。
可以把版本号改成更容易理解的v1.1.1这种。
6)go run ./
打印:Hi, Gladys. Welcome!
新增子项目成功。
备注:
检查是否替换成功:go mod graph | grep yy.cn/mat
要点是,在.go文件中编写import语句后,使用go mod tidy生成require指令。
四、其他提升方向
1、了解更多热门、使用的第三方库。
2、编写代码进行实战。
3、研究代码的抽象逻辑。