gopackage main // 指定当前源文件所在的包名
import "math/rand" // 引入一个标准库包
const MaxRand = 16 // 声明一个具名整型常量
// 一个函数声明
/*
StatRandomNumbers生成一些不大于MaxRand的非负
随机整数,并统计和返回小于和大于MaxRand/2的随机数
个数。输入参数numRands指定了要生成的随机数的总数。
*/
func StatRandomNumbers(numRands int) (int, int) {
// 声明了两个变量(类型都为int,初始值都为0)
// 内置基本类型int
var a, b int
// 一个for循环代码块
for i := 0; i < numRands; i++ {
// 一个if-else条件控制代码块
if rand.Intn(MaxRand) < MaxRand/2 {
a = a + 1
} else {
b++ // 等价于:b = b + 1
}
}
return a, b // 此函数返回两个结果
}
// main函数,或主函数,是一个程序的入口函数。
func main() {
var num = 100
// 调用上面声明的StatRandomNumbers函数,
// 并将结果赋给使用短声明语句声明的两个变量。
x, y := StatRandomNumbers(num)
// 调用两个内置函数(print和println)。
print("Result: ", x, " + ", y, " = ", num, "? ")
println(x+y == num)
}
go run
子命令不推荐在正式的大项目中使用。go run 子命令只是一种方便的方式来运行见得go程序
go build 用来构建可执行程序文件来运行go文件
go install 用来构建可执行程序文件来运行go文件 go run go build go install 只会输出代码语法错误
go vet 可以用来检查可能的代码逻辑错误(即警告)
go fmt 来用同一种代码风格格式化go代码
go test 运行单元和基准测试用例
go doc 在终端中查看go代码库包的文档
关键字是一些特殊的用来帮助编译器理解和解析源代码的单词
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
这些关键字分为四组:
一个标识符是一个以Unicode字母或者_开头并且完全由Unicode字母和Unicode数字组成的单词:
注意:关键字不能被用做标识符 标识符_是一个特殊字符,它叫做空标识符
我们将知道所有的类型名、变量名、常量名、跳转标签、包名和包的引入名都必须是标识符
一个由Unicode大写字母开头的标识符称为:导出标识符。这里导出可以被理解为公开。其他标识符称为非导出标识符。非导出可以被理解为私有。 东方字符都被视为非导出字符,非导出有时候也被称为未导出 下面是一些合法的导出标识符:
Player_9 DoSomething VERSION Ĝo Π
不合法的未导出标识符
_ _status memStat book π 一个类型 변수 エラー
下面这些不能用做标识符
// Unicode数字开头 123 3apples // 含有不符合要求的Unicode字符 a.b *ptr $name a@b.c // 这两个是关键字 type range
go支持如下内置基本类型:
go中有两种内置类型别名(type alias):
以u开头的整数类型称为无符号整数类型。无符号整数类型的值都是非负的。 一个数值类型名称中的数字表示每个这个类型的值将在内存中占有多少二进制位,二进制位通常被称为比特(bit)
比如,一个uint8中的值占有8位。我们称uint8类型的值的尺寸是8位。因此,最大的uint8值是255(2的8方-1),最大的int8值是127(2的7方-1),最小的int8值是-128(-27)
更多的时候,我们使用字节(byte)做为值尺寸的度量单位。一个字节相当于8个比特。所以uint32类型的尺寸为4,即每个unit32值占用4个字节。
尽管布尔和字符串类型分类各自只有一种内置类型,我们可以声明定义更多自定义布尔和字符串类型。 所以,go代码中可以出现很多布尔和字符串类型。下面是一个类型声明的例子。在这些例子中,type是一个关键字
// 一些类型定义声明 type status bool // status和bool是两个不同的类型 type MyString string // MyString和string是两个不同的类型 type Id uint64 // Id和uint64是两个不同的类型 type real float32 // real和float32是两个不同的类型 // 一些类型别名声明 type boolean = bool // boolean和bool表示同一个类型 type Text = string // Text和string表示同一个类型 type U8 = uint8 // U8、uint8和 byte表示同一个类型 type char = rune // char、rune和int32表示同一个类型
我们将上面定义的real类型和内置类型float32都称为float32类型 (注意这里的第二个float32是一个泛指,而第一个高亮的float32是一个特指)。 同样地,MyString和string都被称为字符串(string)类型,status和bool都被称为布尔(bool)类型。
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!