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

<三> go 枚举

在go语言中,没有直接支持枚举的关键字,也就造成go没有直接枚举的功能。但是go提供另一种方法来实现枚举,那就是const+iota // 实现枚举例子 type State int // iota 初始化后会自动递增 const ( Running State = iota // value --> 0 Stopped // value --> 1 Rebooting // value --> 2 Terminated // value --> 3 ) func (this State) String() string { switch this { case Running: return "Running" case Stopped: return "Stopped" default:...阅读全文

博文 2015-11-20 09:00:01 a11101171

Go语言struct的创建与初始化、函数调用

package structTest //struct //Date:2014-4-1 09:57:37 import ( "fmt" "strings" ) func StructTest01Base() { //structTest0101() //structTest0102() structTest0103() } //定义一个struct type Student struct { id int name string address string age int } func structTest0101() { //使用new创建一个Student对象,结果为指针类型 var s *Student = new(Student) s.id = 101 s.name = "Mikl...阅读全文

博文 2015-06-17 23:07:41 books1958

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中new和make的区别

new会分配结构空间,并初始化为清空为零,不进一步初始化 new之后需要一个指针来指向这个结构 make会分配结构空间及其附属空间,并完成其间的指针初始化 make返回这个结构空间,不另外分配一个指针 例子new: var p *[]int = new([]int) 或 p := new([]int) 以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据 同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址 例子make: var v []int = make([]int, 0) v := make([]int, 0) 以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经指向了某个底...阅读全文

博文 2015-10-16 12:00:01 ahlxt123

golang之math/rand随机数

简单的随机数生成,结合时间模块初始化种子 package main import ( "fmt" "math/rand" "time" ) func init(){ //以时间作为初始化种子 rand.Seed(time.Now().UnixNano()) } func main() { for i := 0; i < 10; i++ { a := rand.Int() fmt.Println(a) } for i := 0; i < 10; i++ { a := rand.Intn(100) fmt.Println(a) } for i := 0; i < 10; i++ { a := rand.Float32() fmt.Println(a) } ...阅读全文

博文 2017-12-18 16:00:01 pyyu

go语言初始化内部结构体3中方式

1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 type User struct { 8 Id int 9 Name string 10 Age int 11 } 12 13 type Manger struct { 14 User 15 title string 16 } 17 18 func main() { 19 m := Manger{User:User{1, "ok", 12}, title:"123"} //可以 20 m2 := Manger{User{1, "ok", 12}, "123"} //可以 21 m3 := Manger{User:User{Id:1, Name:"ok", Age:12}, title:"123"} //可...阅读全文

博文 2015-05-14 03:00:00 or2-

golang 数组和切片初始化方式

一、数组初始化方式 var [length]Type var array [5]int //这种方式,只是初始化,不带初始化值,数组长度,已经定义好, 但是其实初始化的值,已经有了并且是该类型的最小值(bool false),int 0, string ' ' 其他,自行验证 var [N]Type{value1, value2, ... , valueN} var array = [5]int{1, 2, 3, 4, 5} // 这种方式,既初始化变量,又带了初始化值,数组长度已经定义好 var [...]Type{value1, value2, ... , valueN} var array = [...]int{1, 2, 3, 4, 5} // 这种方式,既初始化变量,也是带了初始值...阅读全文

博文 2018-08-29 13:34:57 Tim_SSS

golang连接kafka

golang连接kafka的例子好少,而支持offset追踪者更少,但也是基础的要求。”github.com/bsm/sarama-cluster”结合“github.com/Shopify/sarama”满足了此要求。 环境: golang 1.7 kafka 0.10 centos7.2 package main import ( "fmt" "os" "strings" "time" "github.com/Shopify/sarama" "github.com/bsm/sarama-cluster" //support automatic consumer-group rebalancing and offset tracking "github.com/golang/glog" )...阅读全文

博文 2016-11-05 03:00:01 dazheng

golang中new和make区别

golang 中有两个内存分配机制 :new和make,二者有明显区别. new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型 make:返回一个初始化的实例,返回的是一个实例,而不是指针,其只能用来初始化:slice,map和channel三种类型 package main import ( "fmt" ) func main() { a := new([]int) fmt.Println(a) //输出&[],a本身是一个地址 b := make([]int, 1) fmt.Println(b) //输出[0],b本身是一个slice对象,其内容默认为0 } 通过这个例子可以看出,当对slice,map以及channel进行初始化时,使用make比n...阅读全文

go语言初始化结构体new方法的区别

初学go,实例化一个对象的时候,搞得有点晕,以前学php,需要一个对象之间new一个即可,但是在go里面有三种方法,如下 a:=new(user) b:=&user{} c:=user{} 好似这三种方法都可以实现,这是什么原因呢,区别在哪里? ok,请看下面例子 package main import ( "fmt" ) type user struct { id int `1123` } func main() { a := &user{} a.id = 111 b := user{} b.id = 222 c := new(user) c.id = 333 fmt.Println(a, b, c) } 运行后结果如下 &{111} {222} &{333} 现在基本清楚,new(use...阅读全文

博文 2015-11-14 18:00:01 haitgo

struct指针用完后如何释放

下面程序,先用InitReqData函数初始化一个map(map的value是一个struct指针),然后用freeReqData函数回收map中指定key的内容。 freeReqData函数应该怎么写,才既能把指定key从map中去掉,又保证相应的struct指针的释放,避免内存泄露? ``` package main type ReqData struct { Logid string } var( ArrReqData = make(map[string]*ReqData) ) func InitReqData(key string, logid string){ ArrReqData[key] = &ReqDat...阅读全文

Go的AES加密的默认工作模式的吗?

如果是的话 这段Node.js加密 var cipher = crypto.createCipher('aes-128-ecb', key); var encrypted = ""; encrypted += cipher.update(plaintext, 'binary', 'base64'); 应该是转换成下面的Go代码 block, err := aes.NewCipher(key) if err != nil { return nil, err } blockSize := block.BlockSize() origData = PKCS5Padding(origData, blockSize) // origData...阅读全文

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的数组和切片的初步了解, 切边是数组的一个指针,切片的初始化有三种:一种是通过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中struct的使用

我想问下以下两种使用struct方法怎么理解,我先写段代码: type Person struct { name string age int } func (p *Person) SetName(name string) { p.name = name } func (p *Person) SetAge(age int) { p.age = age } /** *使用&来创建新的Person,但是需要初始化值。 */ func NewPerson1() *Person { p := &Person{"lauking", 29} return p } /** *使用ne...阅读全文

golang语言中struct的初始化方式

// 先定义结构体 type Rect struct { width int height int } // 再初始化结构体 rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{10, 20} rect4 := &Rect{width:10, height:20} // 定义 + 初始化同时进行 rect5 := &struct{width int, height int}{10, 20} 版权声明:本文为博主原创文章,未经博主允许不得转载...阅读全文

博文 2015-08-04 11:00:02 YanJiangbo

go语言的继承或者组合,字段的初始化问题

我们知道java或者其他面向对象的语言,字段的初始化值很方便,但是在golang的struct中实现这些,感觉不是很方便,例如在学习beego的时候,我想对controller设置统一的layout, 是否可以自定义个MyController,继承beego.Controller, 然后对layout等做统一的设置: ``` type MyController struct{ beego.Controller: { Layout: "layout_blog.tpl" LayoutSections = map[string]string{ "HtmlHead": "html_head.tpl", "Scripts": "script...阅读全文

Golang中new和make的区别

总结几点: new会分配结构空间,并初始化为清空为零,不进一步初始化 new之后需要一个指针来指向这个结构 make会分配结构空间及其附属空间,并完成其间的指针初始化 make返回这个结构空间,不另外分配一个指针 例子new: var p *[]int = new([]int) 或 p := new([]int) 以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据 同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址 例子make: var v []int = make([]int, 0) v := make([]int, 0) 以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经...阅读全文

博文 2015-05-21 17:00:01 ____追梦人

map嵌套map,每一层map都需要make初始化

package main import ( "fmt" ) // 注意,当map嵌套的时候,每一个map都需要初始化 func main() { var m map[int]map[int]string m = make(map[int]map[int]string) // 初始化 a, ok := m[2][1] if !ok { m[2] = make(map[int]string) //初始化内层的map } m[2][1] = "good" a, ok = m[2][1] fmt.Println(a) fmt.Println(ok) } ...阅读全文

go语言map的复杂用法

// 对于简的map 例如 map[string] string 还是很好掌握的 // 下面这个程序演示复杂的map package main import "fmt" type PersonInfo struct { ID string Name string Address string } func main() { personDB := make(map[string][2]PersonInfo) //初始化,注意对数组的初始化 personDB["test1"] = [2]PersonInfo{{"12345", "Tom", "aaa"}, {"12346", "Xym", "bbb"}} //元素查找,这是通用的使用方法 v, ok := personDB["test1"] ...阅读全文

博文 2015-06-17 23:07:38 zistxym

go语言之初始化的构造函数

// File represents an open file descriptor. type File struct { *file } // NewFile returns a new File with the given file descriptor and name. func NewFile(fd uintptr, name string) *File { h := syscall.Handle(fd) if h == syscall.InvalidHandle { return nil } f := &File{&file{fd: h, name: name}} //初始化一个结构,返回地址 从复合声明中获取地址,意味着告诉编译器在堆中分配空间,而不是栈中。 runtime...阅读全文

博文 2015-06-17 23:05:55 zistxym

新问题:Go语言怎么初始化结构体类型数组中的指针类型呢?(原问题:Go语言怎么在结构体中定义一个指向函数的指针呢?)

type DataNode struct{ cmd *string desc *string handler func() int next *DataNode } var head = []DataNode{ {cmd:"help", desc:"cmd tips", handler:help, next:&head[1]}, {cmd:"add", desc:"addition of two numbers", handler:add, next:nil}} func main(){ //head[0].next = &head[1] //head[1].next = &head[2] //head[2].n...阅读全文

if else _ golang

if else 在 golang package main import ( "fmt" ) func main() { if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } if 8%4 == 0 { fmt.Println("8 is divisible by 4") } if num := 9; num < 0 { fmt.Println(num, "is negative") } else if num < 10 { fmt.Println(num, "has 1 digit") } else { fmt.Println(num, "has multiple digits") } } 7 i...阅读全文

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

beego1.6.1升级到1.7版本遇到的session问题

昨天把beego从1.6.1升级到了1.7的版本,结果运行报错指明session的设置指明是session初始化时由于类型问题出错。 ```golang func init() { globalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid", "enableSetCookie,omitempty": true, "gclifetime":3600, "maxLifetime": 3600, "secure": false, "sessionIDHashFunc": "sha1", "sessionIDHashKey": "", "cookieLifeTime": 3600, "pro...阅读全文

golang struct聚合大量接口时,初始化方式不一致?

日前,因为一个业务需要,在struct聚合上百万个接口(因为没有基类、子类,只有通过接口来代替基类作用)的时候,出现了非常意外的编译提示。初步判定是接口数量有限制导致。 ```code 调试环境:go1.6.2 darwin/amd64 代码如下: ``` ```code package main import ( "fmt" ) const arraynum = 1 << 20 //①,数组的大小定义 type I interface { GetXY() (x, y int16) } type I_impl struct { x, y int16 } func (this *I_impl) GetXY() (x, y int16) {...阅读全文

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

golang学习的点点滴滴:读写文件(面向对象版)

package main import ( "fmt" "bufio" "io" "os" "flag" "strconv" ) // 定义一个结构体 type ReadWrite struct { In *string Out *string } // 定义初始化方法 func (rw *ReadWrite) Init() { rw.In = flag.String("in", "in", "in") rw.Out = flag.String("out", "out", "out") flag.Parse() } // 定义读文件的方法 func (rw *ReadWrite) Read() (result []int, err error) { file, err1 := os.Open...阅读全文

博文 2014-10-04 19:27:44 亓斌哥哥

如何初始化

有结构体如下: ```go type NewsArticle struct { Title string `json:"title,omitempty"` // 图文消息标题 Description string `json:"description,omitempty"` // 图文消息描述 URL string `json:"url,omitempty"` // 点击后跳转的链接。 PicURL string `json:"picurl,omitempty"` // 图文消息的图片链接, } const N...阅读全文

golang学习的点点滴滴:数组切片使用

func main() { arr := [10]int {1,2,3,4,5,6,7,8,9,10} var slice1 []int = arr[:5] //取数组前5个 slice2 := arr[5:]//取数组后5个 slice3 := make([]int, 5)//make一个切片,初始化前5个为0 mySlice2 := make([]int, 5, 10) // make一个切片,初始化前5个为0,初始容量为10 mySlice3 := []int{1,2,3,4} // 直接赋值 // cap:容量 len长度 fmt.Println(cap(mySlice2), len(mySlice2)) s1 := []int{1,2,3} s2 := make([]int, 5)...阅读全文

博文 2014-10-04 19:27:08 亓斌哥哥

go 速学 - 06 - 数组

目录 数组 创建数组 数组的比较 数组与指针 指向数组的指针 数组指针 New 多维数组 摘要 创建数组(指定长度,不指定长度,指定索引),数组指针与指向数组的指针,new 数组 创建数组 直接指定长度 var score [3]int //[0 0 0] 指定长度并初始化 score1 := [2]int{3, 4} //[3 4] 利用索引初始化 score2 := [10]int{3: 4, 9: 1} //[0 0 0 4 0 0 0 0 0 1] 不直接指定长度 score3 := [...]int{1, 2, 3, 4, 5} //[1 2 3 4 5] 数组的比较 Go 中数组为值类型,可以直接使用 == 比较 数组与指针 指向数组的指针 var pscore *[5]int ...阅读全文

博文 2015-05-06 13:00:00 mrseasons

5.Go by Example: For

Go by Example: For for is Go’s only looping construct. Here are three basic types of for loops. The most basic type, with a single condition. A classic initial/condition/after for loop. for without a condition will loop repeatedly until you break out of the loop or return from the enclosing function. package main import "fmt" func main() { i := 1 f...阅读全文

博文 2014-11-27 20:00:01 u013487968

golang中new和make区别

golang 中有两个内存分配机制 :new和make,二者有明显区别. new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型 make:返回一个初始化的实例,返回的是一个实例,而不是指针,其只能用来初始化:slice,map和channel三种类型 package main import ( "fmt" ) func main() { a := new([]int) fmt.Println(a) //输出&[],a本身是一个地址 b := make([]int, 1) fmt.Println(b) //输出[0],b本身是一个slice对象,其内容默认为0 } 通过这个例子可以看出,当对slice,map以及channel进行初始化时,使用make比n...阅读全文

博文 2015-06-17 20:02:37 chenbaoke

一个关于通信这块的问题,求帮助!

代码如下: func main() { //创建一个无缓冲管道 chanal := make( chan int ) for i := 0 ; i < 20 ; i++ { go run( i , chanal ) } chanal<-1 } func run( name int , ch chan int ) { for{ data := <-ch fmt.Println( data ) } } 问题: 在main函数当中,开了20个线程,并且初始化了给管道塞了一个初始值 ! 请...阅读全文

golang test cannot find import

1. 可以import别的项目的main package. 2. 但是引用别的项目main package的时候,需要首先删除~/bin/main_package_name(你所引用的报名),不然回报错"cannot find import ".此问题好像是golang自身test工具的bug. 3.go test一个包A的话,系统只会init此包,和被此包调用过的包.不会初始化别的包.如果在测试的过程中,发现需要别的包的初始化,可以手工利用 import _"package name"来调用初始化. 4.如果go test 一个需要读取配置文件的包,需要执行如下命令 go test -c packagename,-然后当前目录会出现一共packagename.test的可执行文件,执行此文...阅读全文

golang模块初始化

golang的进程初始化顺序是:先初始化全局变量,再调用init函数所以需要注意的是:当全局变量初始化时,可能依赖的模块并没有初始化完成,所以最好不要使用函数来初始化本模块的全局变量,可以将之放入到init函数中。``` codepackage mainimport "fmt"var a = hello()func hello() int { fmt.Println("hello a") return 0}func main() { fmt.Println(a, b)}func init() { fmt.Println("world")}```xietaodembp:tmp xietao$ go run main.gohello aworld a...阅读全文

博文 2018-07-12 17:34:49 xtg040601

golang零碎(一)

今天看了下labrpc模块,学习了相关的golang语法。总结下 map interface{},空的可以表示任何类型,类似java的object struct new 初始化零值 make map slice channel func MakeNetwork() *Network { rn := &Network{} rn.reliable = true rn.ends = map[interface{}]*ClientEnd{} rn.enabled = map[interface{}]bool{} rn.servers = map[interface{}]*Server{} rn.connections = map[interface{}](interface{}){} return ...阅读全文

博文 2016-06-22 18:00:01 cane

关于结构体的初始化

结构体初始化有三种方式: 1.按照顺序提供初始化值 ``` P := person{"Tom", 25} ``` 2.通过field:value的方式初始化,这样可以任意顺序 ``` P := person{age:24, name:"Tom"} ``` 3.可以通过new函数分配一个指针,此处P的类型为*person ``` P := new(person) ``` 我不明白的是什么时候用new初始化返回指针? 我只知道传指针,和不传指针的区别在于有没有拷贝新的数据,改变指针类型的值改变其本身,除此之外呢...阅读全文