Go语言中文网 为您找到相关结果 17

Go slice的容量和长度

package main import ( "fmt" ) func main() { a := []int{1,2,3,4} fmt.Println("a:",len(a), cap(a), a) b := [10]int{1,2,3,4} fmt.Println("b:",len(b), cap(b), b) c := make([]int, 4, 10) fmt.Println("c:",len(c), cap(c),c) d := b[:5] fmt.Println("d:",len(d), cap(d),d) e := append(d,5) //append后d的容量不变 e[0] = 100//没超出底层数组的容量,因此e和d都指向同一个数组,修改e会影响d fmt.Print...阅读全文

博文 2015-01-08 17:00:01 烈冰

golang原子库atomic

package atomic import ( "unsafe" ) // BUG(rsc): On x86-32, the 64-bit functions use instructions unavailable before the Pentium MMX. // // On non-Linux ARM, the 64-bit functions use instructions unavailable before the ARMv6k core. // // On both ARM and x86-32, it is the caller's responsibility to arrange for 64-bit // alignment of 64-bit words acce...阅读全文

博文 2015-07-28 20:00:02 webyh

golang slice Append

s2 := append(s1, *) 切片s1上记录的切片信息复制给s2,1.如果s1指向的底层array长度不够,append的过程会发生如下操作:内存中不仅新开辟一块区域存储append后的切片信息,而且需要新开辟一块区域存储底层array(复制原来的array至这块新array中),最后再append新数据进新array中,这样,s2指向新array。2.如果s1指向的底层array长度够,s2和s1指向同一个array,append的结果是内存中新开辟一个区域存储新切片信息。开辟一块区域存储底层array 使用下面的策略:1.如果 增加的 len < s的cap 则 新s的cap*22.如果 增加的 len > s的cap 则 新s的cap = 老cap + 增加数据的 le...阅读全文

博文 2014-10-04 19:27:29 咖啡伴侣

Go语言daemon启动的解决方法.linux平台

1、使用nohup ./commond & 这种方法最简单.2、这种方法可以使用信号.

package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { if os.Getppid() != 1 { args := append([]string{os.Args[0]}, os.Args[1:]...) os.StartProcess(os.Args[0], args, &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}) return } go func() { var...阅读全文

博文 2016-02-26 12:00:01 fyxichen

Go语言的切片

package main import ( "fmt" ) func main() { arr := [...]string{"go", "python", "java", "c++", "c"} fmt.Println("arr value ", arr) fmt.Println("------------------------") slice1 := arr[1:3] fmt.Println("slice1 now is ", slice1) fmt.Println("len of slice1 is ", len(slice1), ",cap of sclie1 is ", cap(slice1)) fmt.Println("------------------------") sl...阅读全文

博文 2015-01-11 12:00:06 itfanr

都是底层类型,为什么 map是关键字,而string不是呢?

都是底层类型,为什么 map是关键字,而string不是呢? 据说,GO的关键字有25个,仅比 英文26个字母少一个。 其中赫然便有 map在内。 但同样是 GO的内置的底层类型,为什么 string 不在其中呢? 原来,这个是 关键字,保留字,用户不能再使用的名字! 而string是可以作 函数名的...阅读全文

golang 如何通过unsafe.Pointer uintptr来实现string与byte互

主要是对unsafe.Pointer uintptr的一个应用实例,顺便了解golang的string与slice底层是怎样实现的 func Str2bytes(s string) []byte { x := (*[2]uintptr)(unsafe.Pointer(&s)) h := [3]uintptr{x[0], x[1], x[1]} return *(*[]byte)(unsafe.Pointer(&h)) } func Bytes2str(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } Str2bytes:方法代码解释 // 如果了解string底层实现,就明白了。string底层其它就是一个结构体 // st...阅读全文

博文 2020-03-08 00:32:42 _老七

Go中的Array和Slice

Go中的Array和Slice 翻译来于:https://blog.golang.org/slices 操作 extend func Extend(slice []int, element int) []int { n := len(slice) slice = slice[0 : n+1] slice[n] = element return slice } 在下面的使用会出现错误: func main() { var iBuffer [10]int slice := iBuffer[0:0] for i := 0; i < 20; i++ { slice = Extend(slice, i) fmt.Println(slice) } } 底层的buffer最大长度为10,所有在extend...阅读全文

博文 2018-10-21 14:34:39 stonekun

go语言规范1.11(一)

基础类型自定义类型或别名go是强类型语言,其变量都有明确的类型,类型用于确定一组值以及特定于这些值的操作和方法。type (A1 = stringA2 = A1)type (B1 stringB2 B1B3 []B1B4 B3)基于现有类型的自定义类型或者称为别名,以上事例中string, A1, A2, B1, and B2的底层类型为string,[]B1, B3, and B4的底层类型为[]B1.方法集 method set基础类型自定义类型或别名go是强类型语言,其变量都有明确的类型,类型用于确定一组值以及特定于这些值的操作和方法。type (A1 = stringA2 = A1)type (B1 stringB2 B1B3 []B1B4 B3)基于现有类型的自定义类型或者称为别名...阅读全文

博文 2018-11-18 03:12:07 weiwg521

2019-12-23 golang sclice补充

s2=s[x:y] 创建出的切片s2与s共享数组 那么s2的len cap分别是? s2的len=y-x cap=cap(s)-x 比如 s := make([]int, 30, 40) s2 := s[10:20] fmt.Println(len(s2)) // 10 fmt.Println(cap(s2)) // 30 s和s2共享的数组中10-19对s2可见 修改s2的某个值同时反应在s中 对于appends2的操作 上文中s2的cap=y-x 在cap的范围内append 修改的依然是共享数组 s2=append(s2,n) n会反映在s[20]上 替换s[20]的值 当append超过cap时s2底层指向一个新数组 容量提升25% s和s2分道扬镳 使用s2=s[x:y]这种形式创...阅读全文

博文 2019-12-23 17:32:58 nil_ddea