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

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

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 坑集

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 数组 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

golang流程控制if语句

1. if else语句 基本语法 //单条件判断 if condition { //do something } //多条件判断 if condition { } else if condition { //do something } else { //do something } if 单条件先跟个语句然后再做条件判断 if statement;condition{ //do something } //单条件,不带语句的基本判断 package main import( "fmt" ) func main(){ nu := 1 if nu %2 == 0 { fmt.Println("the number is even") } else{ fmt.Println("the numb...阅读全文

博文 2018-07-14 00:30:00 Brin-guo

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语言的“++”和“—”运算符

以下摘自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复制结构体

Golang中复制结构体,可以使用赋值语句 package main import ( "fmt" ) type Dog struct { age int name string } func main() { roger := Dog{5, "Roger"} mydog := roger fmt.Printf("roger addr %p\n", &roger) fmt.Printf("mydog addr %p\n", &mydog) fmt.Println("Roger and mydog are equal structs?", roger == mydog) mydog.name = "piggie" fmt.Println("Roger and mydog are equal s...阅读全文

博文 2019-10-01 14:32:49 aside section ._1OhGeD

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语言的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 肖楠

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语言学习-接口赋值

在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 用interface{} map 给struct赋值

在有些场景下,我们需要用一个map[string]interface{}, map的key是struct中的一个tag的值, value是需要赋值的值,我们可以使用reflect包来进行操作。 我们需要struct的指针,只有指针我们才能在函数中改变struct的值 根据指针获取struct的实例,Type 依次遍历struct的域,取出域中的tag和map中的key进行比较,然后比较域的Type和map中value的Type,如果相等就可以进行赋值了 贴代码: func SetValueByTag(result interface{}, tagName string, tagMap map[string]interface{}) error { t := reflect.TypeOf(re...阅读全文

博文 2019-02-16 08:34:43 siskinc

golang 通过struct 构建多层嵌套的json数据

此例用 微信的 设置菜单为例 底部三个菜单, 每个菜单里三个子菜单 定义结构体 type Btn struct{ Name string `json:"name"` Type string `json:"type"` Url string `json:"url"` Sub_button []Btn `json:"sub_button,omitempty"` //值为空时 直接忽略 } type menu struct{ Button []Btn `json:"button"` } 结构体赋值 jsonData := Menu{ Button:[]Btn{ {Name:"home",Type:"view",Url:"https://www.qq.com/auth"}, {Name:"tool"...阅读全文

博文 2019-07-20 08:32:55 会飞一下

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

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的{}初始化

之前说到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

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

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

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

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 刘地

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

Go的空接口

空接口(interface{})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值。它有点类似于C语言的void *类型。 var v1 interface{} = 1 // 将int类型赋值给interface{} var v2 interface{} = "abc" // 将string类型赋值给interface{} var v3 interface{} = &v2 // 将*interface{}类型赋值给interface{} var v4 interface{} = struct{ X int }{1} var v5 interface{} = &struct{ X int }{1} 当函数可以接受任意的对象实例时,我们会将其声明为inter...阅读全文

博文 2018-10-06 01:35:23 ck_god

[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

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

golang 赋值操作符 := = ==

这里省略了关键字var,我很喜欢这种方式(可以少写代码,而没有任何坏处)。 但这有需要注意的是“ :=” 是在声明和初始化变量,因此该变量必须是第一次出现,如下初始化是错误的。但是要注意赋值时要确定你想要的类型,在Go中不支持隐式转换的。如果是定义个float64类型的变量,请写为 v1 :=8.0 而不是v1 :=8 。 总结如下: := 给某变量的第一次赋值,初始化 = 变量的非第一次赋值 == 等于操作...阅读全文

博文 2016-09-02 03:00:05 lsm135

GOLANG 赋值

基本赋值语法 变量=表达式 var a int;a=1 变量里的元素=表达式 var arr[3] int;arr[0]=1 声明变量类型同时赋值 var 变量 类型=表达式 var arr[3] int =[3]int{1,2,3} 复合操作 变量 运算符=表达式 var c int=10;b+=1 变量里的元素 运算符=表达式 var arr [3] int;arr[1]+=2 自增,自减,使用与数值型,不能放在表达式中 变量++,变量-- var i int=99;i++ 元组赋值 变量1,变量2,变量3=表达式1,表达式2,表达式3 var x,y,x int;x,y,z=1,2,3 简短声明,声明变量同时赋值,变量类型有go自主推导 变量 :表达式 teacher :="曾远征...阅读全文

博文 2016-08-30 16:00:00 zengyz

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中interface嵌入和interface转换

// code_22_interface_field_interface project main.go package main import ( "fmt" ) type Humaner interface { SayHi() } type Personer interface { Humaner Sing(lyrics string) //lyrics 歌词 } type Student struct { name string score float64 } func (s *Student) SayHi() { fmt.Printf("Student[%s, %f]say hi!\n", s.name, s.score) } func (s *Student) Sing(lyric...阅读全文

博文 2018-10-06 02:35:09 ck_god

golang接口的使用:给实现类中属性赋值

使用接口给实现类的变量赋值,例一错误;例二争取。例一:package main import ( "fmt" ) //声明一个接口 type IUser interface { GetName() string SetName(name string) } //声明一个User的结构去实现接口 type User struct { Name string } func (a User) GetName() string { return a.Name } func (a User) SetName(name string) { a.Name = name } func main() { var a IUser //声明a的类型是IUser类型 a = User{"李磊"} //给接口变量赋值...阅读全文

博文 2019-01-29 15:32:06 yanglikai

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]增加并发控制的并发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

go语言与C++细节上的一些差异

类型声明和类型别名的区别 C++: C++中声明新类型,只能使用 类 或 结构体 的形式。 例如在源文件a.cpp中,可以声明类B: class B;。类B的定义放在b.cpp中。 C++中声明类型的别名时,有两种方法: 1,使用typedef关键字。 它的格式是: typedef OldType NewType; 例如:typedef int ChatInt; 2,使用define关键字(宏定义的方法)。 它的格式是:define NewType int; golang: go语言中声明新类型,只能使用type关键字,例如: type Books struct { title string author string subject string book_id int } C++中,对结...阅读全文

博文 2018-10-04 21:34:38 太平小小草

[心凉半截]怎么到处都是陷阱?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语言中接口组合(接口中包含接口)

在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 语言中的可赋值性(Assignability in Go)

Go 是静态类型的编程语言。存储到变量中的值必须与变量的类型匹配。因此,不能像 Python 这种动态类型语言一样,随意的数据都可以作为值赋给变量。这个决定什么是允许赋值的规则就叫做可赋值性(Assignability)。 左边类型为 T 的变量,存在 6 种可以将右边的值赋给左边的情况。 ## 1. 相同类型(Identical types) 第一种是非常明显的。如果右边的类型(也)是 T,则赋值是完全可以的。更多的细节可以参考 ["Identical types in Go"](https://medium.com/golangspec/assignability-in-go-27805bcd5874)。 ## 2. 相同的基础类型(Identical underlying types)...阅读全文

博文 2018-02-09 18:26:29 toseek

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

```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...阅读全文