收藏此站 联系我们 网站
当前位置:首页» 行业新闻 » 【建站服务】怒江设计网页公司-域名申请

【建站服务】怒江设计网页公司-域名申请

作者: 风兰 . 阅读量: 6 . 发表时间:2022-09-21 05:52:24

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


怒江设计网页公司


网站建设.png

  1. func main(){
      changeSliceTest()}func changeSliceTest() {
        arr1 := []int{1, 2, 3}
        arr2 := [3]int{1, 2, 3}
        arr3 := [3]int{1, 2, 3}
    
        fmt.Println("before change arr1, ", arr1)
        changeSlice(arr1) // slice 按引用传递
        fmt.Println("after change arr1, ", arr1)
    
        fmt.Println("before change arr2, ", arr2)
        changeArray(arr2) // array 按值传递
        fmt.Println("after change arr2, ", arr2)
    
        fmt.Println("before change arr3, ", arr3)
        changeArrayByPointer(&arr3) // 可以显式取array的 指针
        fmt.Println("after change arr3, ", arr3)}func changeSlice(arr []int) {
        arr[0] = 9999}func changeArray(arr [3]int) {
        arr[0] = 6666}func changeArrayByPointer(arr *[3]int) {
        arr[0] = 6666}

    输出结果为:

    before change arr1,  [1 2 3]after change arr1,  [9999 2 3]before change arr2,  [1 2 3]after change arr2,  [1 2 3]before change arr3,  [1 2 3]after change arr3,  [6666 2 3]
    lslxdx

       lslxdx

      lsl***@163.com

    4年前 (2019-03-05)
  2.    berakcup

      104***3071@qq.com

    41

    append() 和 copy() 部分,貌似有没说明白的地方。

    当 numbers = [0, 1] 时,append(numbers, 2, 3, 4) 为什么 cap 从 2 变成 6 ?

    经过实践得知,append(list, [params]),先判断 list 的 cap 长度是否大于等于 len(list) + len([params]),如果大于那么 cap 不变,否则 cap 等于 max{cap(list), cap[params]},所以当 append(numbers, 2, 3, 4) cap 从 2 变成 6。

    berakcup

       berakcup

      104***3071@qq.com

    3年前 (2019-03-20)
  3.    andriyy

      ano***ous@abc.com

    17

    使用 copy 函数要注意对于 copy(dst, src),要初始化 dst 的 size,否则无法复制。

    错误示例:

    dst := make([]int, 0)src := []int{1, 2, 3}copy(dst, src)printSlice(src)printSlice(dst)func printSlice(x []int){
       fmt.Printf("len=%d cap=%d slice=%v
    ",len(x),cap(x),x)}

    输出结果:

    len=3 cap=3 slice=[1 2 3]len=0 cap=0 slice=[]

    正确示例:

    dst := make([]int, 3)  // 令size=3src := []int{1, 2, 3}copy(dst, src)printSlice(src)printSlice(dst)

    输出结果:

    len=3 cap=3 slice=[1 2 3]len=3 cap=3 slice=[1 2 3]
    andriyy

       andriyy

      ano***ous@abc.com

    3年前 (2019-03-27)
  4.    Noah

      lh_***9@126.com

    9

    实例:

    package mainimport "fmt"func main() {
       var array = []int{1, 2, 3, 4, 5}
       printSlice(array)
       slice := array[1:]
       printSlice(slice)
       array[1] = 100
       printSlice(slice)}func printSlice(x []int){
       fmt.Printf("len=%d cap=%d slice=%v
    ", len(x), cap(x), x)}

    以上代码执行输出结果为:

    len=5 cap=5 slice=[1 2 3 4 5]


tSlice(slice)

   array[1] = 100

   printSlice(slice)

}


func printSlice(x []int){

   fmt.Printf("len=%d cap=%d slice=%v ", len(x), cap(x), x)

}

以上代码执行输出结果为:


len=5 cap=5 slice=[1 2 3 4 5]

len=4 cap=4 slice=[2 3 4 5]

len=4 cap=4 slice=[100 3 4 5]

Noah

   Noah


  lh_***9@126.com


3年前 (2019-05-05)

   gibson1112


  185***72536@163.com


48

切片内部结构:


struct Slice

{   

    byte*    array;       // actual data

    uintgo    len;        // number of elements

    uintgo    cap;        // allocated number of elements


};

第一个字段表示 array 的指针,是真实数据的指针第二个是表示 slice 的长度,第三个是表示 slice 的容量。


所以 unsafe.Sizeof(切片)永远都是 24。


当把 slice 作为参数,本身传递的是值,但其内容就 byte* array,实际传递的是引用,所以可以在函数内部修改,但如果对 slice 本身做 append,而且导致 slice 进行了扩容,实际扩容的是函数内复制的一份切片,对于函数外面的切片没有变化。


package main


import (

"fmt"

"unsafe"

)


func main() {

    slice_test := []int{1, 2, 3, 4, 5}

    fmt.Println(unsafe.Sizeof(slice_test))

    fmt.Printf("main:%#v,%#v,%#v ", slice_test, len(slice_test), cap(slice_test))

    slice_value(slice_test)

    fmt.Printf("main:%#v,%#v,%#v ", slice_test, len(slice_test), cap(slice_test))

    slice_ptr(&slice_test)

    fmt.Printf("main:%#v,%#v,%#v ", slice_test, len(slice_test), cap(slice_test))

    fmt.Println(unsafe.Sizeof(slice_test))

}


func slice_value(slice_test []int) {

    slice_test[1] = 100                // 函数外的slice确实有被修改

    slice_test = append(slice_test, 6) // 函数外的不变

    fmt.Printf("slice_value:%#v,%#v,%#v ", slice_test, len(slice_test), cap(slice_test))

}


func slice_ptr(slice_test *[]int) { // 这样才能修改函数外的slice

    *slice_test = append(*slice_test, 7)

    fmt.Printf("slice_ptr:%#v,%#v,%#v ", *slice_test, len(*slice_test), cap(*slice_test))

}

结果如下:


24

main:[]int{1, 2, 3, 4, 5},5,5

slice_value:[]int{1, 100, 3, 4, 5, 6},6,10

main:[]int{1, 100, 3, 4, 5},5,5

slice_ptr:[]int{1, 100, 3, 4, 5, 7},6,10

main:[]int{1, 100, 3, 4, 5, 7},6,10

24

gibson1112

   gibson1112


  185***72536@163.com


3年前 (2019-05-21)

   ragonli


  rag***ig@gmail.com


13

slice 的底层是数组指针,所以 slice a 和 s 指向的是同一个底层数组,所以当修改 s[0] 时,a 也会被修改。


package main

import "fmt"

func main() {

    s := []int{1, 2, 3} // len=3, cap=3

    a := s

    s[0] = 888

    s = append(s, 4)

    fmt.Println(a, len(a), cap(a)) // 输出:[888 2 3] 3 3

    fmt.Println(s, len(s), cap(s)) // 输出:[888 2 3 4] 4 6

}


怒江设计网页公司



上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务