go 定义类型

定义变量方式

定义变量时需要注意 在最外层一定要使用var 的方式定义变量不能使用 ':='的方式,只有在func 里面可以使用':=' 定义变量

字符串
1)是值类型,不是引用类型或指针类型
2)只读的byte slice
3)byte 数组可以放任何数据


var(
    str string = "holle"
    sum int = 1
    enable bool =  false
    
)

func test1(){
    var str2 string = "你好"
    str1 := "你好啊"
}

常量 iota 常量计数器 const 中每新增一行常量将使iota 计数一次

// _ 隐藏变量
//  << 位移
const(
  _ = 1 << (10 * iota)
  kb                 
  mb                     
  gb                     
  tb                      
  pb
)

结构体 定义多种不同类型的参数,如 string、bool、int

type address struct{
	province string
	city string
}

接口 数组中的一种集合,具有相同属性的方法,可以使用接口类型定义。

type person interface{
  方法名()
}

方法

type cat struct {}

func (c cat) speak(){
	fmt.Println("喵喵.....")
}

map操作

func TestAccessNotExistingKey(t *testing.T){
	//map 操作
	//在访问的key不存在时,仍然返回零值,不能通过返回值nil来判断元素是否存在
	// int 零值 0 ; string 零值 ""
	m1 := map[int]int{}
	t.Log(m1[1])
	m1[2] =2
	t.Log(m1[2])
	if v,ok :=m1[3];ok{
		t.Log("key exit value ",v)
	}else{
		t.Log("key not exit value ",v)
	}
	m2 := map[int]string{}
	m2[1] = "nihao"
	if value,ok := m2[3];!ok{
		t.Log("key not exit value ",value,"name")
	}
	t.Log(m2)
}

map 的值 可以是一个方法;
与GO 的Dock type 接口方式在一起,可以方便的实现单一方法对象的工厂模式

func TestMapWithFcunValue(t *testing.T){
	m :=map[int]func(op int)int{}
	m[1] =func(op int)int{return op}
	//计算平方
	m[2] = func(op int)int{return op*op}
	// 计算立方
	m[3] = func(op int)int{return op*op*op}
	t.Log(m[1](2),m[2](2),m[3](2)) 
}

通过map实现set 相关的特性

func TestMapForSet(t *testing.T){
	mySet := map[int]bool{}
	mySet[1] = true
	n:=3
    // 判断mySet 的key 是否存在 
	if mySet[n] {
		t.Logf("%d is existing",n)
	}else{
		t.Logf("%d is not existing",n)
	}
	mySet[3] = true
	t.Log(len(mySet),mySet)
    //删除key
	delete(mySet,1)
	t.Log(mySet)
}
posted @ 2023-09-25 15:00  扛把子修BUG  阅读(8)  评论(0编辑  收藏  举报