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
print 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      ||