golang笔记

fmt
inputString :="test"
1. fmt.Printf("the input was: %s",inputString)
2. fmt.Println(inputString)
make()和new()区别
1. new
new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值.
new要点
内置函数 new 分配空间.
传递给new 函数的是一个类型,不是一个值.
返回值是 指向这个新分配的零值的指针.
2. make
make(T, args) 返回的是初始化之后的 T 类型的值,这个新值并不是 T 类型的零值,也不是指针 *T,是经过初始化之后的 T 的引用. make 也是内建函数,你可以从 http://golang.org/pkg/builtin/#make 看到它, 它的函数原型 比 new 多了一个(长度)参数,返回值也不同.
make 只能用于 slice,map,channel 三种类型, 并且只能是这三种对象. 和 new 一样,第一个参数是 类型,不是一个值. 但是make 的返回值就是这个类型(即使一个引用类型),而不是指针.具体的返回值,依赖具体传入的类型.
3. 总结
new(T) 返回 T 的指针 *T 并指向 T 的零值.
make(T) 返回的初始化的 T,只能用于 slice,map,channel,要获得一个显式的指针,使用new进行分配,或者显式地使用一个变量的地址.
new 函数分配内存,make函数初始化;

new和make区别代码:
package main
import "fmt"
func main() {
    p := new([]int)	 //p == nil; with len and cap 0
    fmt.Println(p)
    v := make([]int, 10, 50) 	// v is initialed with len 10, cap 50
    fmt.Println(v)
    /*********Output****************
        &[]
        [0 0 0 0 0 0 0 0 0 0]
    *********************************/
    (*p)[0] = 18        // panic: runtime error: index out of range
                        // because p is a nil pointer, with len and cap 0
    v[1] = 18           // ok
    
}
数组

概念:同一组数据类型的固定长度的序列
注意:
长度数数组类型的一部分,因此var a[2] int 和 var a[3] int是不同的类型
数组索引是从0开始(python相同),访问超过了索引会panic
数组定义完成之后,每个位置会有默认值,int类型,默认值为0,string类型默认为空字符串
数组属于值类型,当对其进行拷贝并修改副本值时,并不会改变原来的值
定义方法:

//第一种
//var <数组名称> [<数组长度>]<数组元素>
var arr [2]int
    arr[0]=1
    arr[1]=2

//第二种
var a []int
a = make([]int, 4)

//第三种
//var <数组名称> = [<数组长度>]<数组元素>{元素1,元素2,...}
var arr = [2]int{1,2}
//或者
arr := [2]int{1,2}

//第四种
//var <数组名称> [<数组长度>]<数组元素> = [...]<元素类型>{元素1,元素2,...}
var arr = [...]int{1,2}
//或者
arr := [...]int{1,2}

//第五种
//var <数组名称> [<数组长度>]<数组元素> = [...]<元素类型>{索引1:元素1,索引2:元素2,...}
var arr = [...]int{1:1,0:2}
//或者
arr := [...]int{1:1,0:2}
切片

概念:切片是对数组的引用,数组的长度不便,但是切片长度是可以变化的。
切片的特性和数组一样,因此遍历、长度计算等和数组一样
切片定义和数组的定义方式在于是否有长度定义,有长度定义为数组、没有长度定义为切片

//方式一,使用make创建
slice1 := make([]type, len,capacity)  或者var slice1 []type = make([]type, len,capacity)//其中capacity(容量)为可选参数

//方式二,直接初始化
slice2 :=[] int {1,2} //长度为2,容量为2

//方式三,从数组中获取切片,与python一样
slice3 := arr[startIndex:endIndex] //将arr数组中从下标startIndex到endIndex-1下的元素创建为一个新的切片
slice4 := arr[startIndex:]         //缺省endIndex时将表示一直到arr数组的最后一个元素
slice5 := arr[:endIndex]           //缺省startIndex时将表示从arr数组的第一个元素开始
map

概念:map是go语言内置key-value的数据结构,与python的dict类似,可称为字典或关联数组。
map声明与初始化
map属于引用类型,声明是不会分配内存的,需要make初始化分配内存。

//只声明不初始化,直接使用会panic,需要使用make分配内存后方可使用
var a map[keytype]valuetype
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string 

//声明并初始化
var a map[string]string
a = make(map[string]string, 8) //8代表容量

a := make(map[string]string, 8)
a := make(map[string]string)

var a map[string]string = map[string]string{}
var a map[string]string =map[string]string{"name":"wd","age":"22"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值