go基础语法
go基础语法
变量
iota
- iota只出现在const中
- 遇到const则置为0
- 用于枚举:并不关心值,只是设计常量,区分其他常量
- _跳过某些值
变量 - 函数外每个语句必须以关键字开始(var、const、func等)
- :=只能用在函数内部
- _用于占位,表示忽略值
变量作用域 - 函数定义的变量为局部变量,作用于函数内部
- 函数外部变量为全局变量,作用于整个包,如果其首字母大写,则作用于整个工程
示例:
const (
v1=iota
v2
v3
_
v4
)
func main() {
fmt.Println(v4)
}
数组
数组初始化
- 使用初始化列表
- 数组长度程序推断
- 索引kv赋值
遍历 - 索引遍历
- range
示例:
func main() {
//长度推断
var arr=[...]int{1,2,3}
for _,val:=range arr{
fmt.Println(val)
}
}
for循环
- 使用goto跳转到指定位置
- 三个条件均可省略,前后两个需要加;
- range循环
示例:
func main() {
for i:=0;i<10;i++ {
if i==6 {
goto breaktag
}
}
breaktag:
fmt.Println("~~~")
var arr=[3]int{1,2,3}
for _,val :=range arr{
fmt.Println(val)
}
}
切片
创建
- 从数组中切得
- make构建
添加
- append
删除
- append(s1[:2],s1[2:])
ps:切片为引用传递
func main() {
var arr=[5]int{1,2,3,4,5}
var slice=arr[:2]
slice=append(slice,6,6,6)
fmt.Println(slice)
}
map
- 使用make函数创建
- 引用传递
判断某个key是否存在:value,ok :=map[key]
遍历 for range
删除 delete
func main() {
var testmap=make(map[string]int,8)
testmap["test"]=1
value,ok :=testmap["test"]
if ok{
fmt.Println(value)
}
}
函数
可作为参数(相当于匿名函数,需赋值给某变量)、返回值
func main() {
fmt.Println(test(1,2,add))
}
func test(v1,v2 int,op func (int,int) int) int {
return op(v1,v2)
}
func add(v1,v2 int) int{
return v1+v2
}
反射
获取类型
- reflect提供TypeOf、ValueOf来获得任意对象的Value、Type
- 类型划分为两种:类型(type)和种类(kind,底层类型)
获取值
- reflect.ValueOf(&p) v.Int()
修改值
- reflect.ValueOf(&p).Elem() 修改
- 可修改结构体的值,但需大写 Field
调用方法
1, MethodByName.Call
func main() {
//修改普通值
var v1=1
reflect.ValueOf(&v1).Elem().SetInt(2)
//调用普通方法
v3:=reflect.ValueOf(SayHi2)
v3.Call(nil)
//修改结构体
var p=person{
"ff",
"11",
}
val:=reflect.ValueOf(&p).Elem()
val.Field(1).SetString("ll")
fmt.Println(p.Addr)
}
func SayHi2() {
fmt.Println("hi 2")
}
type person struct {
Name string
Addr string
}

浙公网安备 33010602011771号