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

golang语言中map的初始化及使用

// 先声明map var m1 map[string]string // 再使用make函数创建一个非nil的map,nil map不能赋值 m1 = make(map[string]string) // 最后给已声明的map赋值 m1["a"] = "aa" m1["b"] = "bb" // 直接创建 m2 := make(map[string]string) // 然后赋值 m2["a"] = "aa" m2["b"] = "bb" // 初始化 + 赋值一体化 m3 := map[string]string{ "a": "aa", "b": "bb", } // ========================================== // 查找键值是否存在 if v,...阅读全文

博文 2015-02-13 15:00:02 YanJiangbo

Go语言之nil详解

Go语言中的nil远比java中的null要难以理解和掌握。 1.普通的 struct(非指针类型)的对象不能赋值为 nil,也不能和 nil 进行判等(==),即如下代码,不能判断 *s == nil(编译错误),也不能写:var s Student = nil。 s := new(Student) //使用new创建一个 *Student 类型对象 fmt.Println("s == nil", s == nil) //false //fmt.Println(*s == nil) //编译错误:cannot convert nil to type Student fmt.Printf("%T\n", s) //*test.Student fmt.Printf("%T\n", *s) //...阅读全文

博文 2015-06-17 23:00:49 books1958

golang将byte的int转换

在使用golang做数据传输的时候,会经常遇到byte与int的互转,但golang并没有现成的方法,因此只能通过binary包来解决 所以,需要 :import "encoding/binary",又因为是byte的转换,所以还涉及到了bytes:import "bytes" 代码如下: package main import ( "bytes" "encoding/binary" "fmt" "strings" ) func main() { b : = []byte{0x00, 0x00, 0x03, 0xe8} b_buf : = bytes .NewBuffer(b) var x int32 binary.Read(b_buf, binary.BigEndian, &x) fmt....阅读全文

博文 2014-10-04 19:27:14 kuerant

golang 坑集

func main() { x := 1 defer func(a int) { fmt.Println("a=", a) }(x) defer func() { fmt.Println("x=", x) }() x++ } 结果: x=2 a=1 说明: defer 调用所需参数在 defer 语句执行时就被已计算好了 (拷贝传递),闭包内则是引用,defer执行顺序FIFO 数组和slice 数组是值类型 slice是引用类型, 数组的创建 arr:=[...]int{1,2,3} arr:=[3]int{} arr:=new([10]int) (注意new返回的是[10]int的指针类) slice的创建 slice:=[]int{1,2,3} slice:=arr[n:m]( n <...阅读全文

博文 2014-10-04 19:27:11 健哥大人

Golang关键字—— var

Golang使用 var 关键字定义变量,语法如下: 1 // 定义一个变量 2 var vname1 int 3 4 // 定义多个变量 5 var vname2, vname3 bool 6 7 // 定义一个变量并赋值 8 var vname4 string = "golang" 9 10 // 定义多个变量并赋值 11 var vname5, vname6 int = 2, 3 12 13 // 定义多个变量并赋值,由编译器推导变量类型 14 var vname7, vname8 = "golang", true 15 16 // 定义多个变量并赋值,由编译器推导变量类型 17 // 此方式只能用于函数内部 18 vname9, vname10 := 4, fals...阅读全文

博文 2015-05-21 10:00:00 nianhua

golang中interface判断nil问题

interface数据的表示 参阅http://research.swtch.com/interfaces 在示例中,我们定义一个interface名为Stringer,同时定义一个符合其定义的Binary类型: type Stringer interface { String() string } type Binary uint64 func (i Binary) String() string { return strconv.Uitob64(i.Get(), 2) } func (i Binary) Get() uint64 { return uint64(i) } func ToString(any interface{}) string { if v, ok := any.(St...阅读全文

博文 2016-02-05 05:00:01 xiaohu50

go语言循环语句 for

Go语言中的循环语句只支持for关键字,而不支持while和do-while结构。 sum := 0 for i := 0; i < 10; i++ { sum += i } 无限循环的写法: sum := 0 for { sum++ if sum > 100 { break } } 条件表达式中也支持多重赋值: a := []int{1, 2, 3, 4, 5, 6} for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 { a[i], a[j] = a[j], a[i] } 使用break,选择中断哪一个循环: for j := 0; j < 5; j++ { for i := 0; i < 10; i++ { if i > 5 { ...阅读全文

博文 2015-07-29 03:00:01 osfipin

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

golang interface赋值

说说我对golang的interface赋值的理解。 先说golang中类型方法定义。 如 type bird struct { id int } func (b bird) fly() { fmt.Println("fly") } func (b *bird) eat() { b.id++ } 中bird类型有两个方法,fly和eat。 两个方法是有区别的,fly由(b bird)绑定,eat由(b *bird)绑定。 在应用中,(b *bird)绑定方式可以修改对象中的参数,而(b bird)方式则不可以。 再来说接口的赋值。接口赋值可以分为对象对接口的赋值和接口对接口的赋值。 对象对接口的赋值需要对象完全实现接口定义的所有方法。 如定义如下接口 type animal interfac...阅读全文

博文 2015-06-17 20:02:23 iwbno1

go语言学习-接口赋值

在go语言中,接口赋值分为2中情况: 1、将对象实例赋值给接口; 2、将一个接口赋值给另一个接口。 1、将对象实例赋值给接口: 要求对象实现了接口的所有方法。 2、将接口赋值给另一个接口: 假设接口A中定义的所有方法,都在接口B中有定义,那么B接口的实例可以赋值给A的对象。反之不成立,除非A和B定义的方法完全一样(顺序不要求),这时A和B等价,可以相互赋值。 3、类实例化时指针或者实例区别: 实例化类的时候,一般有2个方法: (1) 用new(structName):这个方法得到的是*structName类型,即类的指针类型; (2) 用structName{init para}:这个方法得到的是structName类型,即类的实例类型,不是指针。 注意: 类在实现接口的时候,要注意定义的时...阅读全文

博文 2016-01-21 15:00:02 kuoshuang

golang list.remove

for循环删除的时候要用临时变量保存e.Next(),删除后再赋值给e,否则删除后e=nil就直接退出了 func TestList(t *testing.T) { l := list.New() for i := 0; i < 10; i++ { l.PushBack(i) } //fmt.Printf("%v", l.) for e := l.Front(); e != nil; e = e.Next() { fmt.Print(e.Value.(int)) } fmt.Println("") var next *list.Element for e := l.Front(); e != nil; { if e.Value.(int) == 5 || e.Value.(int) == 7...阅读全文

博文 2015-06-18 19:00:34 varding

go语言,变量引用的用法

package main import "fmt" func main() { //引用变量赋值 var a string afuzhi(&a) fmt.Println(a) fmt.Println("=========================") bianliang() } func afuzhi(b *string) { *b = "ccc" //fmt.Println(b) } func bianliang() { var a = [3]int{1, 2, 3} var b = &a b[1]++ fmt.Println(a, b) } /* 输出结果 ccc ========================= [1 3 3] &[1 3 3] *...阅读全文

博文 2014-10-04 19:26:43 elick

go语言学习-method和function

go语言作为一种面向对象的语言,并没有提供C++中的“成员函数”这一种说法,而是用method(方法)来表示。 1、method和function的关系: method是特殊的function,定义在某一特定的类型上,通过类型的实例来进行调用,这个实例被叫receiver。(a Go method is a function that acts onvariable of a certain type, called the receiver. So a method is a specialkindof function. ---摘自《Go语言程序设计》)。 2、为普通类型添加method: go语言不允许为简单的内置类型添加method,如: func(iint)adder_int(ji...阅读全文

博文 2016-04-22 20:00:04 kuoshuang

go的赋值与声明语法糖

:= 只有在左侧有未定义变量时才能使用(有定义的变量也可以) := 只进行语义上的检查,循环内也可以使用,第一次之后的效果和=相同 := 和 = 都要求左右的值和变量一一对应,不会截断 特殊情况,map、chan、类型推定可以返回一个值,也可以是两个值 当map中该键不存在时,总是返回零值和false,否则后者返回true 当chan关闭以后,总是返回零值和false,否则后者返回true package main type INT int func (r *INT) show() { println(int(*r)) } func A() (INT, INT) { return 1, 2 } func B() (INT, bool) { return 3, true } func C() ...阅读全文

博文 2014-10-04 19:26:03 刘地

Go语言的“++”和“—”运算符

以下摘自The Go Programming Language: The increment statement i++ adds 1 to i ; it’s equivalent to i += 1 which is in turn equivalent to i = i + 1 . There’s a corresponding decrement statement i– that subtracts 1. These are statements, not expressions as the y are in most languages in the C family, so j = i++ is illegal, and the y are postfix only, so –...阅读全文

博文 2017-06-24 19:22:04 肖楠

[Golang]也许有你不知道的,Array和Slice(1)

Golang中的array 在golang中,array是同一类型的元素的有序排列,长度不能更改,占用内存上的一段连续空间。 1)基础 首先看看array的声明: [plain] view plaincopyprint?var justiceArray [3]string var justiceArray [3]string 以上声明了justiceArray是为有3个元素的string数组,括号里面的数字是必须的,不能省略。 另外说明一下,[3]string与[2]string是两种不同类型的array。 现在对其赋值:[plain] view plaincopyprint?justiceArray = [3]string{"Superman", "Batman", "Wonder Wom...阅读全文

博文 2015-03-06 12:00:01 abv123456789

golang中赋值string到array

要把一个string赋值给一个array,哥哥遇到一个纠结的困难,研究一番,发现主要原因是array和slice在golang里不是一个东西,本文提供两种解决方案。 在网络编程中network packet transfer,经常要定义固定的字节长度,如下面的f1: package main import "fmt" type T1 struct { f1 [5]byte // I use fixed size here for file format or network packet format. f2 int32 } func main() { t := T1{"abcde", 3} // t:= T1{[5]byte{'a','b','c','d','e'}, 3} // work...阅读全文

博文 2015-06-17 20:04:04 songbohr

golang 知识点

1.//.(type),比如 username.(string) &:类型断言,是interface{}转string 2..//判断网页中checkbox是否被选中 &:为checkbox添加value属性,后台判断r.FormValue(checkbox的name属性) != "",表示被选中 3.//直接输出HTML string类型go的template处理时会自动做escape处理,用template.HTML类型就不会了 values := map[string]template.HTML{"html": template.HTML("
")} 4.//slice赋值 var a = []string{ "1", "2", } func Do() (c []string)...阅读全文

博文 2014-10-04 19:26:51 陈好

go语言赋值

使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。 x = 1 // 命名变量的赋值 *p = true // 通过指针间接赋值 person.name = "bob" // 结构体字段赋值 count[x] = count[x] * scale // 数组、slice或map的元素赋值 特定的二元算术运算符和赋值语句的复合操作有一个简洁形式,例如上面最后的语句可以重写为: count[x] *= scale 这样可以省去对变量表达式的重复计算。 数值变量也可以支持++递增和--递减语句(译注:自增和自减是语句,而不是表达式,因此x = i++之类的表达式是错误的): v := 1 v++ // 等价方式 v = v + 1;v 变成...阅读全文

博文 2016-04-11 03:00:02 zsy

golang-利用反射给结构体赋值

由于想给一个结构体的部分成员赋值,但是有不知道具体名字,故将tag的json名字作为索引,按照json名字来一一赋值 //将结构体里的成员按照json名字来赋值 func SetStructFieldByJsonName(ptr interface{}, fields map[string]interface{}) { logger.Debug("fields:", fields) v := reflect.ValueOf(ptr).Elem() // the struct variable for i := 0; i < v.NumField(); i++ { fieldInfo := v.Type().Field(i) // a reflect.StructField tag := fi...阅读全文

博文 2017-11-06 01:00:01 fwdqxl

go interfate 赋值slice 等数据, 如果是引用类型数据,则一改改全部

func main(){ var str_slice = []string {"123"} var str_interface interface{} str_interface = str_slice fmt.Println(str_slice,str_interface) //输出 [123] [123] str_slice[0] = "963" fmt.Println(str_slice,str_interface) //输出 [963] [963] } go interfate 赋值slice 等数据, 如果是引用类型数据,则一改改全...阅读全文

博文 2014-10-04 19:26:34 984195889

[go]增加并发控制的并发ping

参照anyevent/coro版的ping功能实现. golang没有方便的pop/shift语法,只能自己按数组进行计数 /*gorouting版本的并行ping */ package main import ( "ping" "fmt" "time" "strconv" ) var fin chan string; //用于实现joinall //go没有pop/shift操作,只能自己计数 var cur int /*定义协程 ping单个目标 输入:目标ip/域名 输出:结果, 时延 */ func doit(){ if cur >= len(iplist){ return } ip:=iplist[cur] cur++ go pingr(ip,1000) } func pingr(...阅读全文

博文 2015-06-18 09:09:11 laputa73

golang语法总结(五):变量声明与赋值

变量声明与赋值示例: var i int = 1 //var关键字声明一个变量,紧跟一个变量名,然后是变量类型,最后是赋值var hehe = "hehe" //可以省略变量类型,编译器根据赋值的类型自动推算变量的类型var a,b,c,d = 1,2,3.14,4 //同时申明多个并赋值j := 10 //省略var关键字 如果是全局的变量,还可以这样: var ( a = 1 b uint64 = 3 c =3.14 d := 4...阅读全文

博文 2016-02-22 14:00:06 QQ245671051

golang 相同构造体变量 数据合并

主要功能 根据 第一个 构造体变量字段为空的值 用第二个变量对应字段不为空的值 进行赋值 切记。golang 中切片类型是不可以进行对比的。 package main import ( "fmt" "reflect" ) type conf struct { S string I []int } func main() { c1 := conf{S: "xiaochuan"} c2 := conf{I: []int{1, 2, 3}} v1 := reflect.ValueOf(c1) //初始化为c1保管的具体值的v1 v2 := reflect.ValueOf(c2) //初始化为c2保管的具体值的v2 v1_elem := reflect.ValueOf(&c1).Elem() //返...阅读全文

博文 2016-11-02 10:00:03 liangguangchuan

[心凉半截]怎么到处都是陷阱?golang,我总觉得好危险。

``` package main import ( "fmt" "sort" ) type Score struct { score int } func main() { slc := []Score{Score{10}, Score{9}, Score{7}, Score{6}, Score{5}, Score{4}, Score{3}, Score{2}, Score{1}, Score{0}} temp := append(slc, Score{12}) fmt.Println("temp 1:", temp) fmt.Println("slc 1:", slc) // 输出: //temp 1: [{10} {9}...阅读全文

结构体成员赋值问题,比较疑惑。

```go package main import ( "fmt" ) type stu struct { a int64 b int64 } func Add(a, b int64) (int64, error) { return a + b, nil } func (p *stu) Add(a, b int64) (int64, error) { //var err error p.a, err:= Add(a, b)//此处为什么会提示错误,p.a已经存在,但err不存在。感觉应该可以啊 fmt.Println(p.a) if err != nil { fmt.Println(err.Error()) } ret...阅读全文

Go语言的const

以下摘自The Go Programming Language: A const declaration gives names to constants, that is, values that are fixed at compile time. The value of a constant must be a number, string, or boolean. const的值只能是数字,字符串或者布尔值。 A constant declaration may specify a type as well as a value, but in the absence of an explicit type, the type is inferred from the expres...阅读全文

博文 2017-06-24 19:31:23 肖楠

Go 编程 range 有点坑

func display(array []int) { for _, a := range array { fmt.Print(" ", a) } fmt.Println() } func main() { fmt.Println("Hello World!") nums := make([]int, 10, 20) for _, num := range nums { num++ } fmt.Println("第一次赋值") display(nums) for i := 0; i < len(nums); i++ { nums[i]++ } fmt.Println("第二次赋值") display(nums) } 输出: c:/go/bin/go.exe build -gcflags "-...阅读全文

博文 2016-02-21 06:00:00 u010279421

golang语法总结(七):常量计数器

关键字为iota,没遇到一个const关键字就会置为0,然后递增。还有就是如果定义常量组,没有赋值的编译器会自动将其赋值表达式置为和它前面那个变量的表达式一样 const ( A = 55 B = iota C D)func main() { fmt.Println(A) fmt.Println(B) fmt.Println(C) fmt.Println(D)} 输出: 55 1 2 ...阅读全文

博文 2016-02-22 14:00:06 QQ245671051

go-reflect

反射获取对象的属性,值,方法 package main import "fmt" import "reflect" func main() { u := User{1, "ok", 12} Info(u) } //任何一个对象都实现了空接口 func Info(o interface{}) { t := reflect.TypeOf(o) //获取类型 User类型 fmt.Println("Type", t.Name()) if K := t.Kind(); K != reflect.Struct { fmt.Println("传入的类型不对,不能传地址值,需要传对象或者基本数据类型的地址值") return } v := reflect.ValueOf(o) fmt.Println("f...阅读全文

博文 2016-08-15 20:00:00 u013210620

go(一)变量

package main import ( "fmt" ) func main() { var a int a = 1 var a1 string a1 = "my is a1" b := 2 b1 := "my is b1" fmt.Println(a, "^^^^", a1) fmt.Println(b, "^^^^", b1) } [ `go run test.go` | done: 208.870174ms ] 1 ^^^^ my is a1 2 ^^^^ my is b1 接下来是件很有趣的,有了python的列表的影子,但go语言称之为“字节数组” package main import ( "fmt" ) func main() { a := "my is b" b := []...阅读全文

博文 2014-10-04 19:26:50 bokun-wang

golang的{}初始化

之前说到Golang中某些类型可以赋值nil, 某些类型不能赋值nil. 不能赋值nil都是initialized value不为nil的类型, 例如: bool int, intN uint, uintN floatN complexN byte, rune string struct 可以赋值nil都是initialized value为nil的类型, 例如: array slice map chan func interface pointer 但这些类型中还有另一个问题是, 哪些可以使用{}初始化列表, 哪些不可以? 简单理解, 类型定义中有{}的就可以使用{}初始化列表. 否则不可以. bool int, intN uint, uintN floatN complexN byte ...阅读全文

博文 2016-09-09 18:00:02 zolo

[BFS/DFS]HOJ2581Go

传送门:Go Go My Tags (Edit) Source : Stanford Programming Contest 2007 Time limit : 1 sec Memory limit : 64 M Submitted : 201, Accepted : 117 In the game of Go, two players alternate placing black and white stones on lattice points of an n * n grid, each attempting to surround as much territory(i.e., regions of unfilled lattice points) as possible. At...阅读全文

博文 2015-12-23 04:00:00 u010160562

go语言细节

数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 //数组 9 a1 := [3]int{1, 2, 3} 10 a2 := a1 11 a2[0] = 2 12 fmt.Println(a1) //print: 1 2 3 13 fmt.Println(a2) //print: 2 2 3 14 // 字符串 15 s1 := "123" 16 s2 := s1 17 s2 = "223" 18 fmt.Println(s1) //print 123 19 fmt.Println(s2) //print 223 20 // 切片 21 slice1 := []...阅读全文

博文 2015-11-24 03:00:00 --xiaoyao--

Go语言中接口组合(接口中包含接口)

在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B、C),这种方式等价于在接口A中添加接口B、C中声明的方法。 //接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法 type Reader interface { read() } type Writer interface { write() } //定义上述两个接口的实现类 type MyReadWrite struct{} func (mrw *MyReadWrite) read() { fmt.Println("MyReadWrite...read") } func (mrw *MyReadWrite) write() { fmt.Println("MyReadWrite...write") } //定义一...阅读全文

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

Go错误记录

本篇仅是日常开发中出现的错误记录以及解决方法。 1. no new variables on left side of := 错误原因:所使用的变量已经声明过,不能再使用:=赋值。:=仅支持声明的时候赋值。解决方法:使用=赋值。 2. found packages secondpkg (FileDownloader.go) and filedownloader (HttpGetExample.go) in D:\GoLang\src\filedownloader 错误原因:同一目录下面可以包含多个相同包名的.go文件,不能包含多个不同的包名的.go文件。解决方法:将不同包名的.go文件放到不同目录下,管理项目目录。参考:Go项目目录管...阅读全文

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

golang 基础

1.//对map中的struct赋值 type person struct { id int name string } func main() { persons := make(map[int]person) persons[0] = person{1, "a"} log.Println(persons[0]) v, ok := persons[0] if ok { v.id = 0 persons[0] = v } log.Println(persons) persons1 := make(map[int]*person) persons1[0] = &person{1, "a"} log.Println(persons1[0], ",", persons1) _, ok = pers...阅读全文

博文 2014-10-04 19:26:58 陈好

go protocolbuffer 如何区分客户端来自哪条数据包

我定义了两个数据包 message S2SSystem { message LoginInfo{ required string name = 1; required string passworld = 2; } message RegisterInfo { required string name = 1; required string passworld = 2; required int32 age = 3; required int32 sex = 4; } } //注册 register := new(protocol.S2SSystem_RegisterInfo) if err := p...阅读全文

ok 是怎么赋值的

```go func main() { //声明 m2 := map[string]string{ "a": "aaaa", // "b": "bbbb", //这个也要有逗号 } fmt.Println(m2) //修改 m2["a"] = "cccc" fmt.Println(m2) //增加 m2["c"] = "cccc" fmt.Println(m2) //删除 delete(m2, "c") fmt.Println(m2) //判断键值对是否存在 if v, ok := m2["a"]; ok { fmt.Println(v) fmt.Println(ok) } else { ...阅读全文

variables _ golang

在 golang 中, 变量是通过编译器声明和使用的,并且编译器会进行相应的类型检查 package main import ( "fmt" ) func main() { var a string = "initial" fmt.Println(a) var b, c int = 1, 2 fmt.Println(b, c) var d = true fmt.Println(d) var e int fmt.Println(e) f := "short" fmt.Println(f) } initial 1 2 true 0 short 这, 这 好奇怪的代码 ..... 结论: 1 : golang 中对于变量声明的类型是放在 变量的后面 2 : 在一条语句中可以同时声明几个变量 3 :...阅读全文

博文 2015-03-12 03:00:01 jackkiexu

go programming language(2)

http://tour.golang.org/#1一个很方便学习go的网站 今天看了一下go的流程和面向对象,印象比较深的有 1 go的var的定义格式和c相反 2 go可以多个参数一起赋值 3 go的函数可以有多个返回数值 4 go的语法糖,给任意类型添加函数 5 大小写来区别package函数的private和public 大体感觉go就是一个比较时髦的C, 下一步的学习并行和网络编程,还有一本effective Go的书。 http://go.tuna.tsinghua.edu.cn/doc/effective_go.htm...阅读全文

博文 2014-10-24 22:00:21 wangeen