这是自己学习
GO
语言基础语法及应用时,的一些笔记与心得,觉得是基础中需要注意,并且熟悉的内容。
Go程序的一般结构:
- Go程序是通过 package 来组织的(与Python类似)
- 只有 package 名为 main 的包可以包含 main 函数
- 一个程序 有且仅有 一个main包
部分关键字意义:
- package 声明包 (必须在非注释的第一行)
- import 导入其他包(在要导入的包前面加
_"package"
代表只引用不导入) - const 声明常量
- var 声明变量,全局变量必须使用
- type 声明一般变量,结构,接口
- struct 表示结构
- interface 表示接口
- func 声明函数
可见性规则:
在Go语言中无Java的范围关键词(public、private…..)
所以Go语言中,使用 大小写 来决定 常量、变量、函数、接口….是否能被外部包调用
根据约定 :
- 函数名 小写 即为 private 不能被其他包调用 如:
func my(){}
- 函数名 大写 即为 public 可以被其他包调用 如:
func My(){}
Go基本类型
- 布尔型:bool 1字节 只能是 true 与 false
- 整形 :int/uint 长度根据操作系统 32/64 uint(无负号)
- 8位整形:int8/uint8 1字节 -128~127/0~255
- 字节型:byte = uint8别名
- 16位整形 32整形 64位整形
- 浮点型:float32/float64 4/6字节 精确小数点后7/15
- 复数:complex64/128
- 保存指针的整数型:uintptr
- 其他:array、string、struct
- 引用:map、slice、chan
注意:
- 声明变量时
_
表示移除该变量,用于在函数多返回值有值不需要使用的时候。 - Go类型转换时,不存在隐式转换,所有类型转换必须显示声明
- 类型转换只能发生在两种相互兼容的类型之间 如:float = int (a)
指针
- GO中保留了指针,直接采用“.”来操作目标对象成员
- “&”取得变量地址
- “*”获取变量内容
- 默认值为nil
递增与递减
在GO中,++与–是语句而不是表达式,只能放到变量左边,且不能赋值时使用。
条件判断语句(if)
a:=10
if a:=1 ;a>0 {
fmt.Println(a)
}
fmt.Println(a)
输出:
1
10
- 由代码可见 if 不需要括号,且可以声明值
- 声明值只在该 if 语句块有效且会覆盖外部,同名的值,外部值在 if 外有效并显示。
循环语句(for)
//for 有三种形式
a:=1
// 1 无条件
for {
a++
if a>5 {
break//跳出循环
}
}
// 2 只带条件
for a<3 {
a++
}
// 3 常用形式
for i:=1;i<3 ;i++ {
}
switch语句
a:=1
//正常形式
switch a {
case 0:
fmt.Println("a=0")
case 1:
fmt.Println("a=1")
default:
fmt.Println("000")
}
//不写条件时,可以使用表达式
//在一个条件满足时,想继续执行,需要显示调用"fallthrough"语句
switch {
case a>=0:
fmt.Println("a>=0")
fallthrough
case a>=1:
fmt.Println("a>=1")
default:
fmt.Println("000")
}
跳转语句:goto、break、continue
- 跳转语句,不加标签在跳出最内层循环,加标签可跳出多层循环
- 加标签时,跳转到标签位置。
- 标签区分大小写,不存在标签编会报错
- break 跳出并结束循
- goto调整程序执行位置shuzhu
- continue 结束本次循环,进入下次循环
数组(array)
- 格式: var 数组名称 [数组长度] 数据类型 列: var a[2] int
- 长度不同的数组不能相互转换
- 当不知道数组长度时 […] 编译器会根据结果来确定数组长度 a:= […] int {1,2,3}
- 数组没有的值为默认零值,
- 数组中可以通过“:”为下标位赋值,前面是下标后面是值 列:a:=[…]int {0:1,1:2,10:1},未赋值的地方为默认值。