1.安装
自己下载安装go的安装文件, 安装完了go, 把bin目录添加到系统的变量中去, 配置GOPATH, 下载的go文件的地址. 一般放在go的安装文件夹下的一个叫gopath的目录中.
2.运行
运行go使用命令 , go run hello.go
3.变量
变量声明:
var a int
var b float32=2.3
var c=43
声明变量的简短语法是 name := initialvalue。
4.类型
Go 支持的基本类型:
- bool
- 数字类型
- int8, int16, int32, int64, int
- uint8, uint16, uint32, uint64, uint
- float32, float64
- complex64, complex128
- byte
- rune
- string
有符号整型
int8:表示 8 位有符号整型
大小:8 位
范围:-128~127
int16:表示 16 位有符号整型
大小:16 位
范围:-32768~32767
int32:表示 32 位有符号整型
大小:32 位
范围:-2147483648~2147483647
int64:表示 64 位有符号整型
大小:64 位
范围:-9223372036854775808~9223372036854775807
int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
byte 是 uint8 的别名。
rune 是 int32 的别名。
//强制类型转换的格式.
var a int =1
b := float32(a)
5.常量
常量 的值需要在编译的时候就确定
const a=2
const a int =3
6. 函数
单返回值
func functionname(parametername type) returntype {
// 函数体(具体实现的功能)
}
多返回值
func add(a,b int)(int,int){
return a+1,b+1
}
命名返回值
从函数中可以返回一个命名值。一旦命名了返回值,可以认为这些值在函数第一行就被声明为变量了。
上面的 rectProps 函数也可用这个方式写成:
func rectProps(length, width float64)(area, perimeter float64) {
area = length * width
perimeter = (length + width) * 2
return // 不需要明确指定返回值,默认返回 area, perimeter 的值
}
请注意, 函数中的 return 语句没有显式返回任何值。
由于 area 和 perimeter 在函数声明中指定为返回值, 因此当遇到 return 语句时, 它们将自动从函数返回。
_ 在 Go 中被用作空白符,可以用作表示任何类型的任何值。表示不需要的结果.直接跳过.
如果方法名字第一个字母与是大写的, 表示public 的, 如果是小写的, 就是private 的.
7.包
所有包都可以包含一个 init
函数。init 函数不应该有任何返回值类型和参数,在我们的代码中也不能显式地调用它。init 函数的形式如下:
func init() {
}
init 函数可用于执行初始化任务,也可用于在开始执行之前验证程序的正确性。
包的初始化顺序如下:
- 首先初始化包级别(Package Level)的变量
- 紧接着调用 init 函数。包可以有多个 init 函数(在一个文件或分布于多个文件中),它们按照编译器解析它们的顺序进行调用。
如果一个包导入了另一个包,会先初始化被导入的包。
尽管一个包可能会被导入多次,但是它只会被初始化一次。
8.if
if condition {
}
if condition {
} else if condition {
} else {
}
它包含一个 statement
可选语句部分,该组件在条件判断之前运行
if statement; condition {
}
else
语句应该在 if
语句的大括号 }
之后的同一行中。如果不是,编译器会不通过。
9.循环
for initialisation; condition; post {
}
for i:=1;i<10;i++{
}
break, contiune 和C中的语义相同
//另外一种循环
i:=0
for ;1<10;{
i+=2
}
//无限循环
for{
}
10.switch
与C中不同的是, switch默认不会在匹配后继续匹配下面的, 而是直接跳出, 如果想继续往下匹配, 需要加上关键字fallthrough
switch a{
case 1,2:
fmt.Println(1)
case 3:
fmt.Println(1)
default:
fmt.Println(0)
}
~~~~~~~~~~~~~~~~~~~~~~~
//无表达式的 switch
在 switch 语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch 语句等同于 switch true,并且每个 case 表达式都被认定为有效,相应的代码块也会被执行。
num:=1
switch{
case 1,2:
fmt.Println(1)
case 3:
fmt.Println(1)
default:
fmt.Println(0)
}
//要求匹配之后继续匹配, 加上关键字 fallthrough
switch a{
case 1,2:
fmt.Println(1)
fallthrough
case 3:
fmt.Println(1)
fallthrough
default:
fmt.Println(0)
fallthrough
}