new  返回的是a对象的指针

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
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]
go学习③ make new 切片 切片的视图 appdend copy map 结构体 随笔 第1张


s3 := arr[2:6]
   fmt.Println(s3)
   s4 := s3[3:5]
   fmt.Println(s4)
go学习③ make new 切片 切片的视图 appdend copy map 结构体 随笔 第2张

 

 

 

 

 

 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)
go学习③ make new 切片 切片的视图 appdend copy map 结构体 随笔 第3张

 

  

 

 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]
go学习③ make new 切片 切片的视图 appdend copy map 结构体 随笔 第4张

 

 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 来判断 是否为空

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

 
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄