go学习③ make new 切片 切片的视图 appdend copy map 结构体

 

 new  返回的是a对象的指针

func main() {
    a := new(int)
    fmt.Println(a)
    fmt.Println(&a)
    fmt.Println(*a)
}
***************
0xc000058058  打印指针,就是打印这个指针对应变量的 内存地址
0xc000084018  答应&a,就是打印指针的内存地址
0        打印*a 就是打印指针对应的变量的 值
-------------------------------------------------------------------------------
int是简单类型,如果用复合类型 演示结果稍有不同
func main() {
    a := new([3]int)
    fmt.Println(a)
    fmt.Println(&a)
    fmt.Println(*a)
}
**********************
&[0 0 0]
0xc000084018
[0 0 0]

总结一下;;;;;;感觉没什么用

 

 

make

只能用于切片,映射和管道

func main() {
    a := make([]int, 5, 10)
    fmt.Println(a)
    a[0] = 100
    fmt.Println(a)
}
***************
[0 0 0 0 0]
[100 0 0 0 0]
说明:::一般情况下,go的函数执行时都是按值传参,,但是make是个例外,,所以上面例子修改a[0],再次打印时,a[0]会被修改

 

切片的视图操作   view

    arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
    //取切片
    s1 := arr[2:]
    //修改值
    s1[0] = 100
    fmt.Println(s1)
    fmt.Println(arr)
**********************************************
[100 3 4 5 6 7]
[0 1 100 3 4 5 6 7]



s3 := arr[2:6]
   fmt.Println(s3)
   s4 := s3[3:5]
   fmt.Println(s4)

 

 

 

 

 

 append 和 copy

 

 append

 arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
   s1:= arr[2:6]
   fmt.Println(s1)
   s2 := s1[3:5]    fmt.Println(s2)
   s3 := append(s2,10)    fmt.Println(s3)    fmt.Println(arr)
   s4 := append(s3,11)    fmt.Println(s4)    fmt.Println(arr)
   s5 := append(s4,12)    fmt.Println(s5)    fmt.Println(arr)

 

 
 

 

 copy

copy是从前面开始算的

    data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    //取切片
    //8,9
    s1 := data[8:]
    s2 := data[:5]
    // 将后面切片元素,拷贝到前面切片里面
    //copy()是从前往后添加
    copy(s2, s1)
    fmt.Println(s1)
    fmt.Println(s2)
    fmt.Println(data)
******************************
[8 9]
[8 9 2 3 4]
[8 9 2 3 4 5 6 7 8 9]

 

 map

 

l  Map 是go内置的数据结构,是一种无序的键值对的集合,可以通过key快速找到value的值

 

 m2 :=  map[int]string{1:"hello",2:"world"}

 

 结构体

 

package main

import "fmt"

type Person struct {
    id   int
    name string
    age  int
}

func main() {
    //位置参数
    p1 := Person{1, "godie", 18}
    //指定参数
    p2 := Person{name: "sm", age: 56}
    fmt.Println(p1)
    fmt.Println(p2)
    //指针
    var a *Person = &Person{3, "ko", 12}
    fmt.Println(a)
    fmt.Println(*a)
    fmt.Println((*a).name)
}
************************************
{1 godie 18}
{0 sm 56}
&{3 ko 12}
{3 ko 12}
k
在查找属性的时候,指针会首先找到变量名,再去找变量的属性

 

 

切片是基于数组实现的,,,,

有了数组还要切片干什么,,,因为数组是固定长度的,使用有诸多不便,

切片克服了这一缺陷

定义一个空切片

    a := []int{1, 5, 1, 1, 5, 5, 5}
    fmt.Println(a[1])

或者可以通过已经声明的数组,截取部分作为切片
    var a [5]int = [5]int{1, 5, 2, 5, 2}
    var b []int = a[0:2]

 可以用 nil 来判断 是否为空

切片可以使用数组的所有操作方式,,

 

转载于:https://www.cnblogs.com/m4kemoretime/p/10808571.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值