Golang第二天

来源:互联网 发布:ftp防火墙端口设置 编辑:程序博客网 时间:2024/06/07 03:22

关于make的说明 

普通形式:v := make([]int,100) 

make仅仅适用于map,slice,channel,并且返回的不是指针,应当使用new获取特定的指针

可总结为:

new(T)返回*T指向一个零值T

make(T)返回初始化后的T


Goroutine通过通信来共享内存,而不是通过共享内存来通信


-----------------------------------------

go  中的字符串在赋值之后就不能够更改

----------------------------------------------------

数组也可以通过for range的方式来遍历

数组长度定义之后就不能更改,数组是值类型,每次传递的时候都是传递的是数组的拷贝


创建数组切片的两种方式

1、基于数组

如:var myArray [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}

var mySlice []int  = myArray[:5]

通过for range 来遍历

2、直接创建:使用make 关键值

mySlice1 := make([]int,5)  // 创建一个初始元素个数为5的数组切片,元素的初始值为0

mySlice2 := make([]int,5, 10)//  创建一个初始元素个数为5的数组切片,元素的初始值为0,并预留10个元素的存储空间

mySlice3 := []int{1,2,3,4,5} // 直接创建并初始化包含5个元素的数组切片

3.动态增长

mySlice2 := []int {1,2,3}

mySlice  = append(mySlice,mySlice2...) //...三个点是必须加上的

or    mySlice = append(mySlice,4,5,6)


-----------------------------------------------------------------------------------

创建新的Map

type PersonInfo struct{

ID string

Name string

Address string

}

var  myMap  map[string] PersonInfo

myMap = make(map[string] PersonInfo)

或者 myMap = make(map[string] PersonInfo,100) //初始存储能力可以省略

或者 myMap = map[string] PersonInfo {

"12345": PersonInfo("1","dd","ddddddddd")

}

元素删除

delete(myMap,"222222222222"); 索引值是否存在不会影响结果,但是myMap为空怎会将导致程序抛出异常(panic)


查找元素

value, ok  :=  myMap["123"]

if ok {//通过判断ok是否为true,进而判断

}


--------------------------------------------

switch 后不接表达式,此时switch的功能就等价于if else 

-----------------------------------------------

函数

不定参数类型

func myFunc(args...int){ //形如... type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数,这就是所谓的“语法糖”

for _,v  := range  args{

fmt.printLn("dddddddddddddddddddd");

}

}//从内部实现机理上而言,类型...type本质上是一个数组切片,即[] type

备注:可以使用直接数组切片作为参数传入其中,如下

func myFunc(args []int){

for _,v  := range args{

//

}

}

这种方式调用的形式就要发生改变 myFunc([]int{1,2,3,4,5}),但是前者只需muFunc(1,3,4,5,6)


一种新颖的方式:使用interface {},传递任意类型的参数

func myPrint(args...interface{}){

for _, v := range args{

switch args.(type){

case int:

case string:

case int64:

}

}

}

func main(){

var v1 int = 1

var v2 int64 = 342

var v3 string = "dddddddddd"

myPrint(v1,v2,v3)

}






0 0