开源一个 golang 入门教程,希望对转 golang 的兄弟有帮助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imianba2zz

开源一个 golang 入门教程,希望对转 golang 的兄弟有帮助

  •  
  •   imianba2zz 2023 年 4 月 4 日 2304 次点击
    这是一个创建于 1117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/Zhouchaowen/golang-tutorial

    节选一部分

    Go 中,一个包(Package)是一组相关的代码文件的集合,编写代码时我们通常将相同模块的代码划分到一个Package中以便于重用和维护。每个 Go 程序都至少包含一个包,即 main 包,其中的 main 函数作为程序的入口点。我们首先来看第一个示例。

    目录

    • 入门
    • 导入标准库
    • 导出函数与属性

    入门

    golang中每个可以独立运行的 go 文件都至少包含三部分package main, import, func main()

    package main // 定义了包名,只有定义了 main 的包才能独立运行 // 导入: 标准库和第三方库 import ( "fmt" // 引入一个标准库包 ) // main 函数,程序的入口 func main() { // 调用标准库 fmt 在控制台打印 hello world 字符串 fmt.Println("hello world") } // 通过命令行运行 // go run main.go // go build main.go && ./main 

    如代码中package main表示当前代码隶属于main包。main包是一个特殊的包,我们的启动函数func main()必须要定义在package main下才能执行。

    import()表示要导入标准库(也可以叫做导入一个包)或第三方包, 在实际开发者会引用许多标准库和第三方包来简化业务开发。这里我们导入一个fmt的标准库,这个标准库定义了一些函数在控制台输出一些信息,如Println()函数。

    func main()函数是程序入口。我们可以通过这个函数来运行我们编写的代码,我们在func main()函数中调用fmt标准库的Println()函数在控制台打印一个字串hello world

    导入标准库

    上一个Demo简单介绍了import(), 这一节我们详细介绍import()import()函数用来导入标准库和第三方库,只有通过import()导入的标准库和第三方库我们才能在当前package下调用并且只能调用该package下已经导出的属性和函数。

    package main // 导入: 标准库和第三方库 import ( "fmt" "math/rand" // 导入 rand 库 ) // main 函数,程序的入口。 func main() { // 调用标准库 fmt 在控制台打印 hello world 字符串 // rand.Intn(10) 函数返回一个取值范围在[0,n)的伪随机 int 值,如果 n<=0 会 panic 。 fmt.Println("hello world", rand.Intn(10)) } 

    其中 math/rand 是要导入的包的名称。一旦导入,就可以使用该包中导出的函数、变量和其他标识符,其中在func main()函数中调用标准库(math/rand)的rand.Intn(n)函数获取一个[0,n)的伪随机int值.

    导出函数、变量、常量和类型

    golang语言中想调用其它包的函数、变量、常量和类型需要被调用函数、变量、常量和类型是导出的(在同一包下不导出也可以使用), 导出一个函数、变量、常量和类型非常简单, 只需首字母大写就代表该函数或变量导出。这是一种访问控制机制,用于确保只有您希望外部使用的标识符才能公开。

    math包如下(省略一些信息和注释方便查看)

    package math ......... // Integer limit values. const ( intSize = 32 << (^uint(0) >> 63) // 32 or 64 // 未导出, 其余 package 不能调用 MaxInt = 1<<(intSize-1) - 1 // 导出, 其余 package 能调用 MinInt = -1 << (intSize - 1) ......... ) 

    由于 MaxIntMinInt 的名称以大写字母开头,因此它们可以被导出到 math 的外部使用。如果您在另一个包中导入了 math,则可以使用以下代码访问MaxInt

    package main // 导入: 标准库和第三方库 import ( "fmt" "math" ) // main 函数,程序的入口。 func main() { // 注意:在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问 // 什么是导出?首字母大写代表导出小写代表不导出 //fmt.Println("intSize",math.intSize) // 引用未导出变量将报错 fmt.Println("MaxInt", math.MaxInt) } 

    另一方面, 由于intSize的名称以小写字母开头,因此它们只能在math中使用。如果您在另一个包中导入了 math,则不能访问这个标识符。

    思考题

    1. 导入math包, 通过Sqrt函数求 9 的平方根并打印
    issakchill
        1
    issakchill  
       2023 年 4 月 4 日
    有思考题 不错 支持
    imianba2zz
        2
    imianba2zz  
    OP
       2023 年 4 月 4 日
    @issakchill 感谢支持
    aLazarus
        3
    aLazarus  
       2023 年 4 月 6 日
    star 了,之前跟着官方的文档,感觉还差点意思,等有时间看看老哥这个文档
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1796 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 00:01 PVG 08:01 LAX 17:01 JFK 20:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86