go基础语法

go基础语法

变量

iota

  1. iota只出现在const中
  2. 遇到const则置为0
  3. 用于枚举:并不关心值,只是设计常量,区分其他常量
  4. _跳过某些值
    变量
  5. 函数外每个语句必须以关键字开始(var、const、func等)
  6. :=只能用在函数内部
  7. _用于占位,表示忽略值
    变量作用域
  8. 函数定义的变量为局部变量,作用于函数内部
  9. 函数外部变量为全局变量,作用于整个包,如果其首字母大写,则作用于整个工程
    示例:
const (
	v1=iota
	v2
	v3
	_
	v4
)
func main() {
	fmt.Println(v4)
}

数组

数组初始化

  1. 使用初始化列表
  2. 数组长度程序推断
  3. 索引kv赋值
    遍历
  4. 索引遍历
  5. range
    示例:
func main() {
	//长度推断
	var arr=[...]int{1,2,3}
	for _,val:=range arr{
		fmt.Println(val)
	}
}

for循环

  1. 使用goto跳转到指定位置
  2. 三个条件均可省略,前后两个需要加;
  3. 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)
	}
}

切片

创建

  1. 从数组中切得
  2. make构建

添加

  1. append

删除

  1. 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

  1. 使用make函数创建
  2. 引用传递

判断某个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
}

反射

获取类型

  1. reflect提供TypeOf、ValueOf来获得任意对象的Value、Type
  2. 类型划分为两种:类型(type)和种类(kind,底层类型)

获取值

  1. reflect.ValueOf(&p) v.Int()

修改值

  1. reflect.ValueOf(&p).Elem() 修改
  2. 可修改结构体的值,但需大写 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
}

参看文章:https://www.liwenzhou.com/posts/Go/golang-menu/

posted @ 2022-04-24 16:09  6cc  阅读(37)  评论(0)    收藏  举报