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

Go 记录日志——log包

Golang's log模块主要提供了3类接口。分别是 “Print 、Panic 、Fatal ”,对每一类接口其提供了3中调用方式,分别是 "Xxxx 、 Xxxxln 、Xxxxf",基本和fmt中的相关函数类似,下面是一个Print的示例: package main import ( "log" ) func main(){ arr := []int {2,3} log.Print("Print array ",arr,"\n") log.Println("Println array",arr) log.Printf("Printf array with item [%d,%d]\n",arr[0],arr[1]) } 会得到如下结果: 2016/12/15 19:46:19 Pri...阅读全文

博文 2016-12-15 13:00:03 吃一堑消化不良

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

GO语言:优雅地实现多重继承

有些语言支持多重继承,但是如果多个父类存在相同的属性或方法,就会发生冲突,有些语言为了防止这种情况而只支持单继承,很明显就没有了复用多个父类的属性和方法的优势。go语言其实没有对象的概念,只有结构体。比如有一个父亲,是中国人:type Father struct { MingZi string } func (this *Father) Say() string { return "大家好,我叫 " + this.MingZi }可以理解为父亲类有一个属性,有一个Say方法有父亲当然有母亲,母亲是个外国人:type Mother struct { Name string } func (this *Mother) Say() string { return "Hello, my name i...阅读全文

golang语言构造函数

1、构造函数定义 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。 而golang没有相关的构造函数定义,只能通过new来创建构造函数。 2、构造函数声明 声明一个struct结构: 声明一个全局函数,返回*struct ok,到此已经构造函数定义完...阅读全文

go生成csv

package main import ( "encoding/csv" "os" ) func main() { f, err := os.Create("test.csv")//创建文件 if err != nil { panic(err) } defer f.Close() f.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM w := csv.NewWriter(f)//创建一个新的写入文件流 data := [][]string{ {"1", "中国", "23"}, {"2", "美国", "23"}, {"3", "bb", "23"}, {"4", "bb", "23"}, {"5", "bb", "23"}, } w.WriteAll(d...阅读全文

博文 2014-10-04 19:26:36 别人说我名字很长

Go语言 传值和传指针性能对比

载自达达的博客 以往的C编程经验告诉我们,指针传参会有更好的性能,在Go语言中,这条经验也是通用的。但是需要留意两个问题: 指针传参会导致参数的操作领域不确定,到底函数内部会不会改变传入的对象呢?Go语言中没有类型C那样的const关键字,所以无法控制。Go语言是有GC的,并且这个GC还不是很完善,受对象数量影响较大,传递指针意味着可能多创建不必要的对象,到底指针传参带来的性能提升能不能抵消创建对象产生的GC压力呢?这是一个不好观察到的数据。(原作者达达这里应该是有错误的,首先传值也是复制,要产生一个新对象,分配内存地址传到新的函数中,其次指针一般来说64个字节,复制的代价远小大中型数据传值,因此在都产生一个新对象的情况下,指针还是远优先于传大中型的值结构) 下面是性能消耗的测试代码: pa...阅读全文

博文 2014-10-09 18:00:00 abv123456789

Golang号称高并发,但高并发时性能不高

1.管道chan吞吐极限10,000,000,单次Put,Get耗时大约100ns/op,无论是采用单Go程,还是多Go程并发(并发数:100, 10000, 100000),耗时均没有变化,Go内核这对chan进行优化。 解决之道:在系统设计时,避免使用管道chan传递主业务数据,避免将业务流程处理流程分割到对个Go程中执行,这样做减少chan传输耗时,和Go程调度耗时,性能会有很大的提升。 案例分析:nsq和nats都是实时消息队列,nsq在客户端端和服务端大量使用chan转发消息,导致性能不佳,只有100,000/s;而nats服务端在分发消息流程中,没有使用chan,只在客户端接收时使用chan,性能可达到1,000,000/s。 2.互斥锁Mutex在单Go程时Lock,Unloc...阅读全文

GO语言学习-匿名函数和闭包

Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。 使用方法如下 a := func(input1 int) int{ return input1 += 1 }() b :=a(2) GO语言的匿名函数就是闭包,以下是《GO语言编程》中对闭包的解释  基本概念 闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者 任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含 在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环 境(作用域)。  闭包的价值 闭包的价值在于可以作为函数对象或者匿名函数,对于类型系统而言,这意味着不仅要表示 数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象...阅读全文

博文 2015-06-17 23:00:24 phlong999

Go-Slice

要点 一个区间:[low:high] 两个概念:length, capability 三个函数:make(), append(), copy() 概念 Array是在声明的时候都确定了长度,之后不可更改。Slice和数组类似,也是表示一个有序元素,但这个序列的长度可变。 在Go中,Slice序列中各元素的数据类型必须一致,因为在声明slice的时候即要指定类型。 可以在Python中找到Slice,和Go的Slice基本上是一致的语义和用法。Slice中文通常被译为切片,大抵是因为可以从一个序列中存取指定的某一部分。下面是Collins词典中对于slice的解释,有助于了解该词的含义: N-COUNT (指食物切下的)片,薄片 A slice of bread, meat, fruit, o...阅读全文

博文 2016-09-02 07:00:05 u013344915

golang snmp开发学习笔记(二)

soniah/gosnmp是一个纯go语言编写的SNMP包,基于alouca/gosnmp开发。目前提供GetRequest、GetNext、GetBulk、Walk和SetRequest功能,支持IPv4和IPv6, 支持SNMPv2c和SNMPv3。 本文介绍soniah/gosnmp的SetRequest和Walk操作。 SetRequest snoiah/gosnmp的GoSNMP.Set()方法有一个明显的错误: func (x *GoSNMP) Set(pdus []SnmpPDU) (result *SnmpPacket, err error) { if pdus[0].Type != Integer || pdus[0].Type != OctetString { retur...阅读全文

博文 2015-10-27 08:00:01 wbchen2330

golang在当前执行目录创建日志文件

package main import ( "bufio" "log" "os" "os/exec" "path/filepath" "strings" "time" ) /*获取当前文件执行的路径*/ func GetCurrPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) splitstring := strings.Split(path, "\\") size := len(splitstring) splitstring = strings.Split(path, splitstring[size-1]) ret := strings.Replace(splitstri...阅读全文

博文 2014-10-04 19:27:13 xlplbo

Go 应该成为开发 android 的主要语言

前几天刚看到的新闻时,我就在猜想:如果 google 要摆脱 Oracle 的诉讼纠缠,那么只有一条路:就是用 go 取代 java 成为 android 的主要开发语言。这步迟早是要走的,也许谷歌已经在暗自部署了。我一直觉得手机应用开发采用VM语言或者JS是一种短视的行为,在前期也许会因为门槛低而吸引大量程序员涌入这个市场,但是很多高级应用(对速度响应要求很高)最终都难免要回到C/C++原生函数调用上来。别对我说什么C/C++门槛太高,两年前谁知道ObjectiveC,现在排行榜都到第九位了。苹果的ObjectiveC,诺基亚的C++/QT都选对了开发语言,相信Google很快会采用Go回到正轨,手机...阅读全文

七牛---关于GO SDK的各种Demo

具体可以参考七牛GO SDK的源码以及官网使用文档,以下Demo针对V7版本的SDK: https://github.com/qiniu/go http://developer.qiniu.com/code/v7/sdk/go.html 文件上传 简单上传 package main import ( "github.com/qiniu/api.v7/kodo" "qiniupkg.com/api.v7/conf" "qiniupkg.com/api.v7/kodocli" "fmt" ) var ( //设置上传到的空间 bucket = "yourbucket" ) //构造返回值字段 type PutRet struct { Hash string `json:"hash"` Key s...阅读全文

博文 2016-03-24 14:00:01 netdxy

Go中实现手动内存分配的坑

Go中实现手动内存分配的坑 2016-07-10 你一定想到过,分配一块大的内存,然后从里面切小的对象出来,手动管理对象分配。分配的开销非常小,就是offset加一下。尤其是有些场景,释放时直接把offset重置,就可以重用这块空间了。实现手动内存分配的好处是,减少小对象数目,从而减少垃圾回收时的扫描开销,降低延迟和提升整个性能。 想到不代表做过,做过会踩坑,这篇文章会把你可能要踩的坑都说一遍。不过先说结论:别这么干,不作死就不会死! TL;DR 扩容 开始很容易想用make([]byte)分配空间,如果大小不够时,还可以进行扩容。这是第一个陷阱。 不要append,别让它扩容。一旦发生扩容,会分配一块新的空间,而旧的slice将不再有任何变量引用它,于是会被垃圾回收掉。等等!之前分配的对象...阅读全文

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面向对象

golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。 类的声明: //声明一个类 type People struct { Name string Sex int32 Address string } 这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。 类方法声明: //声明一个类的方法 func (people People) Publish() { fmt.Println("method :Publish") } func (people *People) Sho...阅读全文

博文 2015-07-29 03:00:00 wangjunqiao

golang中的type转换

大家都知道,golang中可以这样定义一个类型: type PowerString string 这种不是面向对象中的继承,但有点像,因为PowerString能得到string的属性方法等。 我们给PowerString写个方法: func (ps PowerString) Print() { fmt.Println(ps) } 那怎么新建一个PowerString呢? 不需要特意写一个new方法,直接把一个string转换成PowerString就可以了: ps := PowerString(“Hi, you!”) ps.Print() 当然你也能新建一个PowerString转换过来的string: str := string(ps...阅读全文

博文 2015-06-17 20:03:54 u011649436

golang实现对mysql数据库的操作

一、创建表格 marksql := "create table mark (id int(20) primary key auto_increment,markname char(50)," + "mlongitude float,mlatitude float,mdescribe char(255),mtype int,creattime char(50),mvalue float );" smt, err := db.Db.Prepare(marksql) checkErr(err) smt.Exec() 二、创建外键 //定义好友fk1外键 idx_userid := "alter table user add index idx_userid(uid);" smt, err = db...阅读全文

博文 2016-03-05 14:00:02 binghunwangcong

Go 反射:根据类型创建对象-第二部分(复合类型)

> 这是关于 Golang 中根据类型创建对象系列博客的第二篇,讨论的是创建复合对象。第一篇在[这里](https://studygolang.com/articles/12434) ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-reflect/cover1.png) 在前一篇博客中,我解释了 go reflect 包 `type` 和 `kind` 的概念。这篇博客,我将深入探讨这些术语。因为相比原始类型,`type` 和 `kind` 对于复合类型来说含义更多。 ## 类型和种类 “类型” 是程序员用来描述程序中数据和函数的元数据。`type` 在 Go 的运行时和编译器中有不同的含义。 可...阅读全文

博文 2018-03-09 09:18:56 polaris

Go 反射:根据类型创建对象-第一部分(原始类型)

> 这是关于在 Go 中根据类型创建对象的博客系列两部分的第一部分。这部分讨论原始类型的对象创建 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-reflect/cover1.png) Go 中的 reflect 包提供了根据执行过程中对象的类型来改变程序控制流的 API。 reflect 包提供了两个重要的结构 - Type 和 Value。 Type 是一个 Go 中任何类型的代表。换句话说,它可以被用于编码任何 Go 类型(例如:int , string , bool , myCustomType 等等)。Value 是一个 Go 中任何值的代表。换句话说,它可以被用于编码、操作任何...阅读全文

博文 2018-02-23 17:51:11 polaris

golang 创建超过10万个Go程时报错stackcacherefill

package main import( //"fmt" "time" ) var c = make(chan int,100) func gofunc(){ time.Sleep(0) c<-0 } func main(){ for i:=0;i<10;i++{ for j:=0;j<10000;j++{ go gofunc() } time.Sleep(time.Second) } } fatal error: out of memory (stackcacherefill)runtime stack:runtime.throw(0x45f820) c:/go/src/pkg/runtime/panic.c:520 +0x71stackcacherefill() c:/go/src/pk...阅读全文

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

go-redis in golang

func main() { //设置redis服务器地址 spac := redis.DefaultSpec().Host("202.108.33.173") log.Print("spac:", spac) //创建一个异步的client Client, err := redis.NewAsynchClientWithSpec(spac) if err != nil { log.Fatal(err) } log.Println("Redis: ", Client) //get x k := "x" futureBytes, err := Client.Get(k) if err != nil { log.Panicln(err) } v, _ := futureBytes.Get(); l...阅读全文

博文 2015-11-02 20:00:00 s630405377

golang内存释放

一、前言 一般在golang运行完成初始化时,会创建专门的goroutine用于后台监控、定期任务,这其中也涉及到了强制垃圾回收、内存释放等任务。 // 主goroutine. func main() { // ... // m0: 系统主线程 // g0:主goroutine // m0、g0是比较特殊的 仅用于main goroutine的父goroutine g.m.g0.racectx = 0 if sys.PtrSize == 8 { // 64bits 系统 maxstacksize = 1000000000 } else { // 32bits系统 maxstacksize = 250000000 } // 新建M(物理线程) mainStarted = true if GOA...阅读全文

博文 2019-01-09 22:34:43 神奇的考拉

[golang note] 类型系统

值和引用 • 值语义和引用语义 值语义和引用语义的差别在于赋值: b = a b.Modify() 如果b的修改不会影响a的值,那么属于值类型,否则属于引用类型。 • 值类型和引用类型 √ 引用类型一个特点:引用不绑定特定对象(c++中引用是要绑定特定对象),例如有两个同类型引用a和b,它们可以引用各自的对象A和B;但如果a和b的引用都指向A,那么通过b修改对象内容可以反应到a引用之中。 √ golang从本质上说,一切皆是值类型,并没有内建一个类似java或c#等语言中的reference类型。 √ golang可以使用指针,可以在行为上达到类似java或c#等语言中reference的效果。 √ golang中从行为表现上看,数组属于值类型,数组切片、字典、通道和接口属于引用类型。 ▶ ...阅读全文

博文 2016-03-08 09:00:01 heartchord

Go 语言编写轻量级网络库GrapeNet

Go 语言编写轻量级网络库 (grapeNet is a lightweight and Easy Use Network Framework) 可用于游戏服务端、强网络服务器端或其他类似应用场景,每个模块单独提取并且拥有独立的使用方法,内部耦合性较轻。 其实 GO 语言曾经有过很多强架构的框架,比如GOWOLRD之类的,已经足够了,但是我会将库用于各种轻量级应用不需要过于复杂的内容,所以我设计了GrapeNet,目的是模块独立化。 你可以拆开只使用其中很小的模块,也可以组合成一个服务端,并且在架构中设计也较为轻松,至于热更新的问题,目前脚本数据支持热更新,并且是自动的,只要跑一下UPDATE即可,程序本身稍后测试后发布(仅支持LINUX)。 本库更像是一个日常服务端开发的轻量级工具库...阅读全文

C++中的友元函数和友元类的使用方法

在c++编程中,我们常常接触到类的概念,众所周知,一般类中有公用的(public)成员和私有的(private)成员,公用成员可以通过外部访问,私有成员只有奔雷中的函数才可以访问。今天小编将给大家介绍一个不遵循此规则的类,那就是友元(friend)。 C++中的友元是好友的意思,可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类,下面我们就一起来看看他们的用法吧。 友元函数 在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。友元函数可以访问当前类中的所有成员,包括 private 属性的。 1、 将普通函...阅读全文

golang二进制协议接口映射

在写服务器程序时,特别是业务向的服务(比如游戏服务器),经常会遇到处理许多客户端协议的情况,如果是http服务,那么定义好处理接口,剩下的交给web服务器就可以了。但是二进制协议就没有这么方便了。 通常的自定义二进制协议规则都是固定长度消息头+变长消息体构成,在消息头中会有消息长度,消息id等字段。(基于TCP流式协议),服务器接收到客户端消息后,首先读取消息头,解析得到消息长度,再按照指定长度获取到完整的消息体的二进制数据。 在写具体业务逻辑时,需要面临从网络层获取到的原始数据,怎么映射到内存数据结构并调用相应处理接口的问题。前面所说的二进制消息体的格式多种多样,大家都有自己的做法,这里以protobuf为例,构建服务器端接收到原始数据后,通过消息id映射生成对应的protobuf结构体,...阅读全文

如何通过reflect动态创建struct并赋值??

我通过protobuf定义了n个message结构,并通过protoc编译生成了对应的struct。 所以在xxx.pb.go中有 typedef name1 struct{......}, typedef name2 struct {...}, ......typedef nameN struct{.....} 现在,我收到了这样一条信息,name, []byte,通过name我知道了对应结构体的名字,通过[]byte我知道了对应结构体序列化后的内容,现在我要生成相应的结构体。 我查了相关资料,步骤如下: ``` package main import ( "fmt" "reflect" ) type Foo struct { name string }...阅读全文

GO语言 使用hash 表

package main import ( "fmt" ) type Data struct{ date string; value int; } func main() { fmt.Printf("hello world!\n"); var m = make(map[string]int); //创建一个空白的hash m["str1"] = 10; m["str2"] = 1000; fmt.Printf("%d\n",m["str1"]); // 遍历 hash for name,value := range m { fmt.Printf("%s\t%d\n",name,value); } ...阅读全文

博文 2015-06-17 23:07:37 juxuny

go 类型方法 receiver的理解

package main import "fmt" type Person struct{ name string age int } func (this *Person) Growth(){ this.age ++ } func (this *Person) ChangeName(newname string){ this.name = newname } func main(){ p := Person{"wangzy", 30} p.Growth() fmt.Printf("%d", p.age) } 因为go不是面向对象的,struct也不是类,没有类方法,但是通过类型方法,提供该struct 的方法,类似类方法了。 可以通过类实例去调用。 感觉完全可以替换的 可以通过该结构体的引...阅读全文

博文 2016-04-02 23:00:01 frankwangzy1103

Go ADM,Go语言轻量ORM

厚颜无耻的推荐一下,go-adm,Go语言轻量ORM。0.1.0分支已经实现类面向对象的操作方式,说明请戳这里。 目前的总体特性已经完成,暂时不会增加其他的特性,待0.1.0的面向对象化的特性测试完善,会合并到主分支中。 艾玛,不要打我,就是推荐一下,不要打脸…… 咳,Go的确吊炸天,我计划将agimvc也搬到Golang上,不过mvc这个词可以丢掉了...阅读全文

博文 2015-05-07 08:00:00 曾建凯

大话设计模式(golang) 五、工厂方法模式

模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。 程序实例:计算器。 package main import ( "fmt" ) type Operation struct { a float64 b float64 } type OperationI interface { GetResult() float64 SetA(float64) SetB(float64) } func (op *Operation) SetA(a float64) { op.a = a } func (op *Operation) SetB(b float64) { op.b = b } type AddOperation struct { Operation...阅读全文

博文 2016-08-04 20:00:15 平凡之路

Golang 面向对象

继承 package main import ( "fmt" ) type People struct { name string age int weight int } type Student struct { People specialty string } // define sayHi method on People struct func (p People) sayHi() { fmt.Println(1) } func main() { p := People{"syy", 1, 2} s := Student{People{"syy", 1, 2}, "Seecialty"} p.sayHi() s.sayHi() } 下面的方法,主要作用是在People结构体上定义...阅读全文

博文 2015-01-31 23:00:11 未来还没来

Go语言使用组合的方式实现多继承

在大多数面向对象的编程语言中多继承都是不支持的。因为在基于class的体系中,多继承极大地增加了编译器的复杂性。 Go语言使用组合的方式实现继承,因此也可以很简单的实现多继承。 //使用组合的方式实现多继承 type Phone struct{} func (p *Phone) Call() string { return "Ring Ring" } type Camera struct{} func (c *Camera) TakeAPicture() string { return "Click" } //多继承 type CameraPhone struct { Camera Phone } func structTest0803() { cp := new(CameraPhone) ...阅读全文

go reflect 3 rules

1. Reflection goes from interface value to reflection Object. 反射可以从接口值得到反射对象 使用到reflect methods: reflect.ValueOf(i interface{}) Value reflect.TypeOf(i interface{}) Type 2. Reflection goes from refelction object to interface value. 反射可以从反射对象获得接口值 使用到reflect methods: reflect.New(typ Type) Value reflect.Zero(typ Type) Value func (v Value) Type() Type ...阅读全文

博文 2015-11-10 22:00:00 hittata

golang不到30行代码实现依赖注入

项目地址 go-di-demo 本项目依赖 使用标准库实现,无额外依赖 依赖注入的优势 用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦。一般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响。 golang的依赖注入原理 总的来说和java的差不多,步骤如下:(golang不支持动态创建对象,所以需要先手动创建对象然后注入,java可以直接动态创建对象) 通过反射读取对象的依赖(golang是通过tag实现) 在容器中查找有无该对象实例 如果有该对象实例或者创建对象的工厂方法,则注入对象或使用工厂创建对象并注入 如果无该对象实例,则报错 代码实现 一个典型的容器实...阅读全文

博文 2018-07-24 19:34:52 xialeistudio

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 亓斌哥哥

开发者必须知道的五款工具

任何高明的程序员都不可能一次性写出完美的代码,因此APP测试以及调试就成了开发者们必修的一项技能。一些工具可以让开发者们事半功倍,所以本文介绍了五款诊断调试工具,可以帮助我们对代码、UI界面等进行调试。 TestBird 这是国内大名鼎鼎的手游和APP云测平台,能提供APP和游戏的自动化测试、真人体验测试、服务器压力测试。TestBird目前已经拥有超过2000款手机,能够让这些手机自动运行各类APP,并生成测试结果。测试报告中丰富的截图和日志,可以帮助开发者们快速定位BUG,提高工作效率。 Cocoa LumberJack Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一。它可以提供更高级的log功能,比如记录log至文件或网络...阅读全文

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

大话设计模式(golang) 六、原型模式

模式特点:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 程序实例:从简历原型,生成新的简历,简历类Resume提供Clone()方法。 package main import ( "fmt" ) type PersonalInfo struct { name string sex string age string } type WorkExperience struct { timeArea string company string } type Resume struct { PersonalInfo WorkExperience } func (this *Resume) SetPersonalInfo(name string, sex string, age s...阅读全文

博文 2016-08-04 20:00:14 平凡之路