Go语言bool类型(布尔类型)

Go语言中的布尔类型与 PHP 中的布尔类型差不多,关键字都是 bool,但是Go语言中布尔类型的值只能是预定义常量 true 或 false。

在Go语言中布尔类型的声明方式如下所示:

var v1 bool
v1 = true
v2 := (1 == 2)      // v2 也会被推导为 bool 类型与 PHP 不同的是,Go语言是强类型语言,变量类型一旦确定,就不能将其他类型的值赋值给该变量。因此,布尔类型不能接受其他类型的赋值,也不支持自动或强制的类型转换。以下的示例是一些错误的用法,会导致编译错误:

var b bool
b = 1           // 编译错误
b = bool(1) // 编译错误在Go语言中,以下的用法才是正确的:

var b bool
b = (1!=0)                      // 编译正确
fmt.Println(“Result:”, b) // 打印结果为 Result: true此外,由于强类型的缘故,Go语言在进行布尔值真假判断时,对值的类型有严格限制,不同类型的值不能直接使用==!=运算符进行比较,否则就会报错,比如下面这段代码:

b := (false == 0);在编译的时候就会报如下错误:

cannot convert 0 (type untyped number) to type bool
invalid operation: false == 0 (mismatched types bool and int)同样,!运算符也不能作用于非布尔类型值。

Go语言变量声明与初始化

变量声明有多种形式,未初始化的标准格式如下所示。

var 变量名 变量类型定义一个变量名为 a 的 int 类型变量,示例代码如下:

var a int批量声明未初始化的变量,不需要每行都通过 var 关键字声明,具体语法格式如下所示。

var (
    a int
    b string
    c []float32
    d func() bool
    e struct{
        x int
        y string
    }
)未初始化变量的默认值有如下特点:

  • 整型和浮点型变量默认值为 0;
  • 字符串默认值为空字符串;
  • 布尔型默认值为 false;
  • 函数、指针变量、切片默认值为 nil。

初始化变量的标准格式如下所示:

var 变量名 变量类型 = 表达式初始化变量也可以省略变量类型,让编译器自动推断变量类型,如下所示:

var 变量名 = 表达式初始化变量的简短声明格式(短变量声明格式)如下所示:

变量名 := 表达式分别使用以上三种方式定义一个变量,并初始化为 10,示例代码如下:

var a int = 10      // 初始化变量的标准格式
var b = 10          // 初始化变量的编译器自动推断类型格式
var c := 10         // 初始化变量的简短声明格式使用:=赋值操作符可以高效地创建一个新的变量,称为初始化声明。声明语句省略了 var 关键字,变量类型将由编译器自动推断。这是声明变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。该变量名必须是没有定义过的变量,若定义过,将发生编译错误。

var a = 10
a := 20         // 重复定义变量 a编译报错如下:

no new variables on left side of :=多个短变量声明和赋值中,至少有一个新声明的变量出现在左侧,那么即便其他变量名可能是重复声明的,编译器也不会报错。情况如下所示。

var a = 10
a, b := 100, 200虽然这种方法不会报错,但是在使用过程中应尽量避免。

本文章引用自 http://www.weixueyuan.net/(因感觉收获甚多,特地收藏,如有侵权,联系作者,必删)

变量

变量是计算机语言中储存数据的基本单元,它的功能是存储数据。变量可通过变量名(也叫标识符)访问,例如:小千的年龄是 18 岁,可以使用一个变量来引用 18,如下图所示。

变量
图:变量
变量的本质是计算机分配的一小块内存,专门用于存放指定的数据,在程序运行过程中该数值可以发生改变;变量的存储往往具有瞬时性,或者说是临时存储,当程序运行结束,存放该数据的内存就会释放,该变量就会随着内存的释放而消失。就像日常生活中存放水的水杯,当水杯损坏的时候,装在里面的水也会流失掉。

变量又分为局部变量和全局变量。

  • 局部变量,是定义在大括号{}内部的变量,大括号的内部也是局部变量的作用域;
  • 全局变量,是定义在函数和大括号{}外部的变量。

Go 语言的变量名由字母、数字和下画线组成,但是首个字符不能为数字。Go语言的语法规定,定义的局部变量若没有被调用会发生编译错误,编译报错的内容如下所示:

age declared and not used表达式是值和操作符的组合,它们可以通过求值成为单个值。“数据类型”是一类值,每个值都只属于一种数据类型。

本文章引用自 http://www.weixueyuan.net/(因感觉收获甚多,特地收藏,如有侵权,联系作者,必删)

Go语言的关键字与标识符

1、预定义标识符

预定义标识符是Go语言系统预先定义的标识符,具有见名知义的特点,例如函数“输出”(printf)、“新建”(new)、“复制”(copy)等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。下面列举了 36 个预定义标识符,如下表所示。

appendboolbyteсарclosecomplexcomplex64complex128uint16 
copyfalsefloat32float64imagintint8int16uint32
int32int64iotalenmakenewnilpanicuint16
printprintlnrealrecoverstringtrueuint uint8uintptr

2、关键字

Go语言的关键字是系统自带的,是具有特殊含义的标识符。Go语言中内置了 25 个关键字用于开发。下面列举了Go语言代码中会使用到的 25 个关键字或保留字,如下表所示。

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
forimport returnvarcontinue

3、自定义标识符

用户根据需要自定义的标识符,一般用来给变量、类型、函数等程序实体起名字。

自定义标识符实际上是一个或多个字母A~Z 和 a~z、数字0~9、下画线_等组成的序列,但是第一个字符必须是字母或下画线,而不能是数字。

Go语言不允许在自定义标识符中使用“@”、“$”或“%”等符号,也不允许将关键字用作自定义标识符。如果将预定义标识符用作自定义标识符,那么自定义标识符的含义会覆盖预定义标识符,容易造成程序混乱。另外,Go语言是一种区分大小写的编程语言。因此,Manpower 和 manpower 是两个不同的标识符。

错误的自定义标识符示例如下表所示:

错误的自定义标识符错误原因
1xy以数字开头
caseGo语言的关键字
chanGo语言的关键字
nil预定义标识符

需要注意的是,在现实生活中,名字可以重复,比如可能有很多人叫作张三,但是在Go语言中,标识符绝对不能重复,要确保每个标识符都代表一个独立的个体。

本文章引用自 http://www.weixueyuan.net/(因感觉收获甚多,特地收藏,如有侵权,联系作者,必删)

GO的基本程序

让我们来开始第一个程序

package main
import "fmt"
func main() {
    /*输出"Hello World!"*/
    fmt.Println("Hello World!")
}

第 1 行 package main 定义了包名。必须在源文件中非注释的第 1 行指明这个文件属于哪个包,例如 package main。package main 表示一个可独立执行的程序,每个Go语言应用程序都需要包含一个名为 main 的包,并且该包中包含一个名为 main() 的函数(该函数是Go语言可执行程序的执行起点,既不能带参数,也不能定义返回值)。

第 2 行 import “fmt” 中 import 语句用于导入该程序所依赖的包。由于本示例程序中用到了 Println() 函数,而该函数属于 fmt 包,所以需要导入 fmt 包,fmt 包实现了格式化 I/O(输入/输出)。

第 3 行 func main() 是程序入口。所有Go语言函数都是以关键字 func 开头的,每一个可执行程序都必须包含一个 main() 函数,这个 main() 函数通常是程序启动后第一个执行的函数,如果有 init() 函数则会先执行 init() 函数。

第 4 行 /*…*/ 是程序的注释,在程序执行时,注释的部分将被程序忽略,不会执行。

第 5 行 fmt.Println(…) 用来将字符串输出到控制台,并在最后自动增加一个换行字符\n。使用 fmt.Print(“Hello, World!\n”) 也会得到相同的结果。

除此之外,还有以下几点值得注意:

  • 只有 package 名称为 main 的包可以包含 main() 函数;
  • 一个可执行程序有且仅有一个 main 包;
  • 通过 import 关键字来导入其他非 main 包;
  • 可以通过 import 关键字导入单个包,也可以同时导入多个包。