Golang 基础
常量
const obj1 string = "CJS"
const obj2 = "NB"
const (
Sunday = 7
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
)
const (
Sunday = 7
Monday = iota
Tuesday
Wednesday
Thursday
Friday
Saturday
)
变量定义
var a, b int
var c string
或者
var (
a int
b string
c float64
d bool
)
变量初始化的几种情况
var a int = 100
var b = "cjs"
var (
c = 1
d = "nb"
)
e := true
值类型与引用类型
int 、float、bool 和 string
以及 数组 和 结构体 都属于值类型
啥是值类型,就是将一个变量的值可以通过“= ”赋值给另一个变量
注意的是,这里的数组也是直接赋值,不用一个一个传
指针、切片、map 、channel都属于引用类型
init函数
变量除了可以在全局声明中初始化,也可以在 init 函数中初始化。
这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,
并且执行优先级比 main 函数高。
每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。
package trans
import "math"
var Pi float64
func init ( ) {
Pi = 4 * math. Atan ( 1 )
}
go中的数字类型
整型
int 和 uint
在 32 位操作系统上,它们均使用 32 位(4 个字节),
在 64 位操作系统上,它们均使用 64 位(8 个字节)。
uintptr 的长度被设定为足够存放一个指针即可。
整数:
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 )
无符号整数:
uint8 (0 - > 255 )
uint16 (0 - > 65 , 535 )
uint32 (0 - > 4 , 294 , 967 , 295 )
uint64 (0 - > 18 , 446 , 744 , 073 , 709 , 551 , 615 )
浮点型
go 是没有float类型的,也没有double类型
只有float32 和float64 类型
尽可能的使用float64 类型,因为math、库里都是flaot64类型
Go 中不允许不同类型之间的混合使用
一些注意
取余运算只能作用于整数
++ 、-- 只能用于后缀,且只能作为单独语句,不能作为表达式
var arr = 100
var brr int
arr++
++ arr
brr = arr++
fmt. Println ( arr)
fmt. Println ( brr)
类型别名
type TZ int
type ST string
类型别名, 得到的新类型, 并非和原类型完全相同
字符类型
严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例。
byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。
例如:var ch byte = 'A' ;字符使用单引号括起来。
循环结构
if - else
类似C语言的用法,{ 与if 在同一行,else if 也在同一行
可以在if 、else - if 行,做初始化,即 if n:= 10 ; n>= i{ }
switch
类似C语言的用法,且没有break
如果想继续执行后面的内容,你懂的,用fallthrough
for
GO语言没有while 只能用for 代替
for 有与C语言一样的用法
for true / 或者一个表达式{
死循环
}
for i, x:= range obj{ } 的用法
这里注意下,x为接收每一个里面的值,这是拷贝,并非引用,改变x的值,不会对原数组或切点产生变化
break与continue
break 只能跳出最内层循环
continue 都懂