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

golang 使用 strings.Split 切割的注意

s := strings.Split("", "") fmt.Println(s, len(s)) s = strings.Split("abc,abc", "") fmt.Println(s, len(s)) s = strings.Split("", ",") fmt.Println(s, len(s)) s = strings.Split("abc,abc", ",") fmt.Println(s, len(s)) s = strings.Split("abc,abc", "|") fmt.Println(s, len(s)) fmt.Println(len("")) fmt.Println(len([]string{""})) str := "" fmt.Println(str[0]...阅读全文

博文 2014-10-04 19:27:43 984195889

数组与切片

数组与切片的概念在其它语言中也有,之前我是没有搞明白他们之间的关系的。今天做了下总结 区别:数组是值类型,切片是引用类型,在使用的时候有区别。 如果用一个数组A创建新数组B的时候,需要将A中的所有元素全部复制一遍过去。如果是切片的话,就会指向原来的数据。 数组赋值拷贝见下面例子 func main() { var a [10]int = [10]int{1, 2, 3} b := a b[0] = 2 fmt.Printf("%d,%d", (int)(a[0]), (int)(b[0])) } 输出的结果 1,2 创建过程也不同: 数组的创建使用 = []type{}创建,初始数据为0。 ...阅读全文

go操作json,注意json的嵌套、数组

package main import ( "encoding/json" "fmt" "os" ) type ConfigStruct struct { Host string `json:"host"` Port int `json:"port"` AnalyticsFile string `json:"analytics_file"` StaticFileVersion int `json:"static_file_version"` StaticDir string `json:"static_dir"` TemplatesDir string `json:"templates_dir"` SerTcpSocketHost string `json:"serTcpSocketHost...阅读全文

博文 2014-10-04 19:27:31 max佩恩

go语言实现两个数组合并(merge)

//x数组,i:x数组的起始下标 y数组,j:y数组的起始下标 //说明:x和y数组都是有序的数组 func merge(x []int, i int, y []int, j int) []int { xlen := len(x)//x数组的长度 ylen := len(y)//y数组的长度 z := make([]int, xlen+ylen)//创建一个大小为xlen+ylen的数组切片 k := 0//数组切片z的下标 for i if x[i] < y[j] {//把小数放在数组切片z里 z[k] = x[i] i++ } else { z[k] = y[j] j++ } k++ } for i != xlen {//把x到xlen-1的数据也存入z中 z[k] = x[i] k++...阅读全文

博文 2014-10-04 19:26:25 zongjh

go语言数据类型-数组(array)

1 go语言数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。 2 数组定义 定义方式如下 var arr [n]type n表示数组长度,type表示数组存储类型。 在Go语言中,...阅读全文

博文 2014-10-10 14:00:00 JesseYoung

Go语言实现将[]string转化为[]byte

Go语言实现将[]string转化为[]byte 假设你想实现Go语言的string数组到byte数组的转化。演示函数如下所示: func convertStringsToBytes(){ stringContent := []string{"通知中心","perfect!"} byteContent := "\x00"+ strings.Join(stringContent, "\x02\x00") // x20 = space and x00 = null fmt.Println([]byte(byteContent)) fmt.Println(string([]byte(byteContent))) } 完整代码: package main import ( "fmt" "string...阅读全文

博文 2016-05-22 18:00:00 GreatElite

Go语言创建、初始化数组的各种方式

Go语言的语法很灵活,以下展示了创建并初始化数组的多种方式: //数组初始化的各种方式 func arraySliceTest0201() { //创建数组(声明长度) var array1 = [5]int{1, 2, 3} fmt.Printf("array1--- type:%T \n", array1) rangeIntPrint(array1[:]) //创建数组(不声明长度) var array2 = [...]int{6, 7, 8} fmt.Printf("array2--- type:%T \n", array2) rangeIntPrint(array2[:]) //创建数组切片 var array3 = []int{9, 10, 11, 12} fmt.Printf("...阅读全文

博文 2015-06-17 23:01:47 books1958

对GoLang里的slice要谨慎使用append操作

结论:GoLang里对slice一定要谨慎使用append操作。cap未变化时,slice是对数组的引用,并且append会修改被引用数组的值。append操作导致cap变化后,会复制被引用的数组,然后切断引用关系。 代码和注释如下: package main import ( "fmt" ) func main() { array := []int{10, 11, 12, 13, 14} slice := array[0:4] // slice是对array的引用 fmt.Println("array: ", array) // array: [20 21 12 13 14] fmt.Println("slice: cap=", cap(slice), ", value=", slice)...阅读全文

博文 2015-06-17 20:03:44 gzliudan

Go-数组去重

package main import( "fmt" "sort" ) func RemoveDuplicatesAndEmpty(a []string) (ret []string){ a_len := len(a) for i:=0; i < a_len; i++{ if (i > 0 && a[i-1] == a[i]) || len(a[i])==0{ continue; } ret = append(ret, a[i]) } return } func main(){ a := []string{"hello", "", "world", "yes", "hello", "nihao", "shijie", "hello", "yes", "nihao","good"} sort....阅读全文

博文 2016-04-04 12:00:05 shuanger_

go语言之整形和字节数组的转换

go语言之整形和字节数组的转换 //整形转换成字节 func IntToBytes(n int) []byte { tmp := int32(n) bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, tmp) return bytesBuffer.Bytes() } //字节转换成整形 func BytesToInt(b []byte) int { bytesBuffer := bytes.NewBuffer(b) var tmp int32 bin...阅读全文

博文 2015-06-17 23:01:43 bojie5744

golang array, slice, string笔记

本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io. array: 数组的长度是该数组类型的一部分,例如var buffer [256]byte 的类型是[256]byte, len(buffer)总是返回256. slice: 一个slice描述一个数组中连续的一部分,例如var slice = buffer[100:250]。slice也可以从slice产生,如var slice2 = slice[5:10],其中slice的type是[]byte。slice并不真正存储数据,它只是包含一个指向数据的pointer,你可以把它当成这样的一个结构: type sliceHeader struct...阅读全文

博文 2015-01-22 13:00:01 daizuozhuo

golang 数组

声明数组 简单声明数组 //声明一个2个元素的数组,名字为shuzu1,因为是int型数组,所以初值为0,即[0,0] var shuzu1 [2]int //声明一个2个元素的数组,名字为shuzu2,并同时赋初值,{}里为空,说明没有赋初值,等同于上面 shuzu2 := [2]int{} 声明数组并同时赋初值 //声明一个2个元素的数组,名字为shuzu3, shuzu3_1, shuzu3_2,并同时赋初值,结果均为[1,2] shuzu3 := [2]int{1,2} //{}里的冒号左边是下标,右边是值 shuzu3_1 := [2]int{0:1,1:2} shuzu3_2 := [2]int{1:2,0:1} 声明数组并同时赋初值,并自动计算长度 //不指定数组长度,自动计算...阅读全文

golang 数组 slice 乱序

数组乱序 方法1.sliceOutOfOrder 选定随机数r 将下标r和下边i交换,i– ,就是和当前最后一位交换 方法2.rand.Perm(数组长度) 将原数组下标按照随机出来的数据赋值给另一数组 package main import "fmt" import "math/rand" import "time" var ( rr = rand.New(rand.NewSource(time.Now().UnixNano())) a1 = [2]int{} a2 = [10]int{} ) func main() { a := []int{0, 1} for i := 0; i < 10000; i++ { randslice() //fmt.Println(rr.Intn(10)) ...阅读全文

博文 2015-10-20 18:00:37 csapr1987

go语言实现两个数组合并(merge)(二)

package main import ( "fmt" ) func Merge() { a := []int{3,6,9, 4,5,45} z := merge2(a, 0, 2, 5, 6) fmt.Printf("%#v\n", z) } //x数组,下标p,q,r 元素个数m。x[p]~x[q]及x[q+1]~x[r]已按递增排序 func merge2(x []int, p, q, r, m int) []int { z := make([]int, m) k := 0 a := q b := q + 1 for p if x[p] z[k] = x[p] p++ } else { z[k] = x[b] b++ } k++ } for p != a+1 { z[k] = x[p]...阅读全文

博文 2014-10-04 19:26:25 zongjh

深入理解golang — 数组(array)、切片(slice)、map

我比较喜欢先给出代码,然后得出结论 数组 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 arr := [...]int{1, 2, 3} 9 //打印初始的指针 10 fmt.Printf("the pointer is : %p \n", &arr) 11 printPointer(arr) 12 } 13 14 func printPointer(any interface{}) { 15 fmt.Printf("the pointer is : %p \n", &any) 16 } 结果 1 the pointer is : 0xc082008580 2 the pointer is : 0xc0820001d0...阅读全文

博文 2014-10-05 08:24:15 aqsmoke

go语言实现stack

golang package stack import ( "errors" ) type Stack []interface{} func(stack *Stack) Push(v interface{}) { *stack = append(*stack, v) } func(stack *Stack) Pop() (interface{}, error){ if len(*stack) == 0 { return nil, errors.New("stack empty") } v := (*stack)[len(*stack) - 1] *stack = (*stack)[:len(*stack) - 1] return v, nil } func(stack *Stack) Top...阅读全文

博文 2015-05-12 09:00:01 guonaihong

go语言数组的拷贝

go语言的数组与c语言的数据有一点不太一样的地方,go语言的赋值是值拷贝 package main import "fmt" func main() { var ages [4]int = [4]int{1, 2, 3, 5} var b = ages b[0]++ fmt.Println(ages) fmt.Println(b) } 输出的结果是: [1 2 3 5] 
[2 2 3 5] 要想使ages改变时,b也跟着改变可以使用指针 package main import "fmt" func main() { var ages [4]int = [4]int{1, 2, 3, 5} var b = &ages b[0]++ fmt.Println(ages) fmt.Println(...阅读全文

博文 2016-03-17 11:00:12 u010087712

睡眠排序--go实现

一次偶然的机会看见了睡眠排序,很有意思的一种排序算法,可以说是对我们熟悉的正规排序的一种挑战,是思想上的突破,有点像脑筋急转弯。使用睡眠排序算法,只能按照从小到大的顺序排列。打印数组中的数据时,按照其大小sleep,这样,数越大sleep的时间也就越长。所有的数同时进入sleep状态,数比较小的会提前打印出来。近期使用的都是GO语言,对其并发也有了些许理解,所以,使用go语言来实现这种排序,是很不错的选择。 // test project main.go package main import ( "fmt" "time" ) var flag bool var container chan bool var count int func main() { flag = true conta...阅读全文

博文 2014-10-04 19:26:02 lxy15329

Golang -- 函数

函数声明 func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { 函数体 return 语句 } func 关键字 (p myType) 表明 函数所属于的类型对象!,即为特定类型定义方法,可以省去不写,即为普通的函数 (这里我们主要讲解 普通的函数) 函数名 参数 (可以不声明) 返回值 (可以不声明) 函数体 函数调用 我们知道C++的类中有 private,public,friend,可以控制类成员可见度。并且通过命名空间来减少命名冲突。Java也是如此。 在Go语言中 和python一样,也是采用 package 来对 不同的模块 进行划分的。 可以直接调用 13 个内置函数(函数全部为小写名称) 调用标准包...阅读全文

博文 2016-03-02 15:00:01 xiaorenwuzyh

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不定参数

1.有时候想一个函数中传入的参数很可能是不定的,除了可以使用: func funcname(...interface{}){ } 2.也可以将许多参数放进一个数组中,然后作为参数传入函数(或许会觉得这样有点多此一举,但是很可能存在历史遗留问题): func funcname(args []interface{}){ fmt.Print(args...) //args...是将一个数组按顺序变成不定参数传入,这个还真的挺好用的 } $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

博文 2015-11-30 15:00:42 vrinux

Go语言基础变量定义及初始化

package main import "fmt" func main(){ //变量定义 var v1 int var v2 string var v3 [10] int //数组 var v4 [] int //数组切片 var v5 struct{ f int } var v6 *int //指针 var v7 map[string] int //key 为string value为int的map var v8 func (a int) int //变量初始化 var var1 int = 10 var var2 = 10 var var3 := 10 fmt.Println("变量初始化") fmt.Printf("var1=%d, var2=%d, var3=%d\n", var1...阅读全文

博文 2015-03-17 03:00:01 qifeng1991

Go语言中的多维数组传递

在Go语言中,当多维数组直接作为函数实参进行参数传递的时候,会有很大的限制性,比如除第一维数组的其他维数需要显式给出等;此时可以使用多维切片来作为参数传递: type s1 []int type s2 []s1 剑指offer一书面试题3: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下的顺序排序。完成一个函数,输入二维数组和要查找的数,判断该数是否存在于二维数组中。 代码: package main import ( "errors" "fmt" "os" ) type s1 []int type s2 []s1 var searchErr error = errors.New("search error") func main() { a := s2{ s1{1...阅读全文

博文 2016-05-13 08:00:02 air_upc

如何关闭数组边界检查

我想用Go来做数值计算,做了一个简单的实验,发现同样的矩阵运算,Go所用的时间是用C的2.5倍左右. 下面是我的编译命令: Go : gccgo -g -O3 *.go; C: gcc -std=c99 -g -O3 *.c 这里,gccgo 后面必须要有参数-g, 为了公平起见,在编译C代码时,我也用了这个参数.我知道Go在引用数组元素时是要进行边界检查的,怎么关闭边界检查?否则,Go是不能胜任大规模的数值运算的...阅读全文

Go by Example: Slices

切片是Go语言的关键类型之一,它提供了比数组更加强大的队列相关接口。 package main import "fmt" func main() { // 和数组不同的是,切片的类型仅由它所包含的元素决定。 // 使用内置函数make可以创建一个长度不为零的切片。 // 下面创建了一个长度为3,存储字符串的切片, // 切片元素默认为零值,对于字符串就是""。 s := make([]string, 3) fmt.Println("emp:", s) // 和数组一样可以使用index来设置元素值或获取元素值 s[0] = "a" s[1] = "b" s[2] = "c" fmt.Println("set:", s) fmt.Println("get:",...阅读全文

博文 2014-12-06 14:00:01 codemanship

go的数组和切片

对于GO的数组和切片的初步了解, 切边是数组的一个指针,切片的初始化有三种:一种是通过make,即 slice := make([]int,5,10) 另一种是通过:=指向一个已经存在的数组。即 slice := []int {1,2,3,4,5,6} 切片的切片不可初始化超过原始切片的cap值,比如: sliceA := make([]int,5,10) sliceB := sliceA[:11] 这个是不行的,11超过了sliceA的cap值(10),会报运行时异常。 对切片的append,如果超过切片的cap值,编译器会扩充切片cap至原始切片cap+扩展后的切片len...阅读全文

博文 2014-10-10 17:00:06 canzyq

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

Go学习笔记之:数组

数组是一个具有相同数据类型的元素组成的固定长度的有序集合。 在Go语言中,数组是值类型,长度是类型的组成部分,也就是说"[10]int"和“[20]int”是完全不同的两种数组类型。 同类型的两个数组支持"=="和"!="比较,但是不能比较大小。 数组作为参数时,函数内部不改变数组内部的值,除非是传入数组的指针。 数组的指针:*[3]int 指针数组:[2]*int 示例1: package main import "fmt" func main() { // 这里我们创建了一个具有5个元素的整型数组 // 元素的数据类型和数组长度都是数组的一部分 // 默认情况下,数组元素都是零值 // 对于整数,零值就是0 var a [5]int fmt.Println("emp:", a) // 我...阅读全文

博文 2014-11-26 08:00:01 Goopand

切片数组指针???切片指针数组???

``` func MyToString(my []*my) string { info := make([]string, 0, 5) for _, data := range (orderManage) { info.append(info, data.name) info.append(info, data.class) info.append(info, data.adde) } return string(info) } //其中my是我自己定义的类型,函数功能是:将[]*my里面的数据转化为string类型。 ``` Qes:...阅读全文

golang 组合算法

//递归输出组合内容func combineloop(arr []string, r []string, i int, n int, output chan<- []string) { if n <= 0 { return } rlen := len(r) - n alen := len(arr) for j := i; j < alen; j++ { r[rlen] = arr[j] if n == 1 { or := make([]string, len(r)) copy(or, r) output <- or } else { combineloop(arr, r, j+1, n-1, output) } }}//...阅读全文

博文 2015-06-18 17:04:34 zhjih123

学习Golang语言(5):类型--数组

学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Golang语言(5):类型--数组 学习Golang语言(6):类型--切片 今天继续跟着“码术”一起学习Golang语言。之前的章节我们学习了Golang的基本数据类型。接下来我们要学习Golang内置的高级类型:数组、切片和字典。首先先讲解数组。 数组(array) Go语言的数组是一个定长的序列,数组包含的元素的类型相同。多维数组可以简单的使用自身为数组的元素来创建。 数组的元素使用操作符[]来索引,索引号从0开始。因此数组第一个元素为:array[0],最后一个元素为array[len(arr...阅读全文

博文 2014-10-09 16:00:02 codemanship

Go语言基础:array、slice、make和new操作、map

array 数组声明和赋值 go的数组声明跟C语言很相似,除了数组类型放在变量名后面【这点跟变量的声明一样】。 数组的定义格式: //一维数组 var 数组名[n] 数组类型 //需要注意的是:'[n]'可以写成'[...]',go会自动根据元素个数来计算长度, //我猜应该是编译的时候计算的吧 //二维数组 var 数组名[2][n]int{[n]数组类型{..},[n]数组类型{}} 数组的声明和赋值: //一维数组 var ar = [5]byte {'a', 'b', 'c', 'd', 'e'} //也可以 ar := [5]byte {'a', 'b', 'c', 'd', 'e'}//注意这个只能是函数内部定义,也就是局部变量 //二维数组 var arr = [2][4]in...阅读全文

博文 2016-08-16 21:00:06 uudou

golang的一些试验小程序

golang的Map程序: package main import "fmt" type e interface{} func mult2(t e) e { switch t.(type) { case int: return t.(int) * 2 case string: return t.(string) + t.(string) } return t } func add3(t e) e { switch t.(type) { case int: return t.(int) + t.(int) + t.(int) case string: return t.(string) + t.(string) + t.(string) } return t } func localmap(s...阅读全文

博文 2014-10-04 19:27:19 壬癸甲乙