PHP 开发者学 Golang 之基本结构
PHP 是一门弱类型的语言,所以 PHP 开发者的我们刚刚接触强类型的语言是有点蛋疼的。 在写普通程序的时候,弱类型挺方便的。但是在设计金钱相关的程序,强类型语言往往更安全。
今天我们就来学习一下 Golang 的基本结构、基本数据类型。 每一门语言都有其关键字和预定义标识符。Golang 语言也不例外。
Go 语言有25 个关键字或保留字,有 36 个预定义标识符。要记熟这些关键字和标识符。
关键字或保留字
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 |
预定义标识符
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
常量、变量
常量
Go 语言中的的常量定是使用 const
关键字
常量要求在编译时可以确定的值。所以常量定义不允许声明一个变量的值。
const Pi = 3.14159 //正确
const abc = getAbc() //错误
多个变量可以使用括号一下定义多个
const (
a = 100
b = 200
c = 300
)
变量
变量定义使用 var
关键字
var a = 1000;
定义变量的时候需要指定变量的类型。 如果不指定则要求给变量赋予一个默认值,指定默认值后,又 Go 语言自动推导类型
var abc = 200
var str String
同时定义多个变量,同样是使用括号的形式
var (
str string
num int
m map[string]string
)
简短形式
简短形式的变量定时是使用 :=
的形式来定义。
b := 2000
相同类型的多个变量可以声明在同一行,如:
var a, b, c int
也可以在同一行赋值
a, b, c = 1, 2, "test"
init 函数
变量的初始化除了可以在全局声明中初始化,也可以在 init 函数中初始化。
init
是一种很特殊的函数,在每个包完成初始化后自动执行,无法手动调用,并且执行优先级比 main 函数高。
package main
import "fmt"
var Pi float64
func init() {
Pi = 3.14159
fmt.Println(Pi)
}
数据类型
布尔类型 bool
var a = 10 > 9 // true
!a // false
数字类型,数字类型还区分整数类型,浮点数类型,无符号整数类型。
整数:
- int8(-128 -> 127)
- int16(-32768 -> 32767)
- int32(-2,147,483,648 -> 2,147,483,647)
- int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
浮点型(IEEE-754 标准):
- float32(+- 1e-45 -> +- 3.4 * 1e38)
- float64(+- 5 1e-324 -> 107 1e308)
无符号整数:
- uint8(0 -> 255)
- uint16(0 -> 65,535)
- uint32(0 -> 4,294,967,295)
- uint64(0 -> 18,446,744,073,709,551,615)
整数类型不支持隐式转换,只能手动进行显式转换
var a int16 = 34
var b int32
b = a + a //这个是错误的形式,会报错:./test.go:7:4: cannot use a + a (type int16) as type int32 in assignment
显式转换后再去计算就支持了
var a int16 = 34
var b int32
b = int32(a) + int32(a)
print(b) //68
复数类型,复数类型有 complex64
(32 位实数和虚数),complex128
(64 位实数和虚数)
var b complex64 = complex(5,6)
fmt.Println(b)
运行结果: (5+6i)
位运算,位运算有 按位与 &
,按位或 |
,按位异或 ^
运算符与优先级
运算符优先级从高到底。
优先级 运算符
7 ^ !
6 * / % << >> & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||