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

Go实例学:可变长参数函数

支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数。 package main import "fmt" // 这个函数可以传入任意数量的整型参数 func sum(nums ...int) { fmt.Print(nums, " ") total := 0 for _, num := range nums { total += num } fmt.Println(total) } func main() { // 支持可变长参数的函数调用方法和普通函数一样 // 也支持只有一个参数的情况 sum(1, 2) sum(1, 2, 3) // 如果你需要传入的参数在一个切片中,像下面一样 // "func(slice...)"把切片打...阅读全文

博文 2014-11-29 17:00:01 Goopand

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

golang中defer的使用规则

自个人博客chinazt.cc 在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。 为了更好的学习defer的行为,我们首先来看下面一段代码: func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } dst, err := os.Create(dstName) if err != nil { return } written, err = io.Cop...阅读全文

博文 2017-07-01 08:00:37 vikings-blog

go/golang main() init()方法的调用

main() ,init()方法是go中默认的两个方法,两个保留的关键字。 init()方法 是在任何package中都可以出现,但是建议 每个package中只包含一个init()函数比较好,容易理解。 但是main() 方法只能用在package main 中。 Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个 package中的init函数都是可选的,但package main就必须包含一个main函数。 程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时 将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可 能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被...阅读全文

博文 2015-10-20 13:00:05 u011156212

golang的cgo支持调用C++的方法

1)swift,貌似官网的推荐 2)extern "C" 我使用后者,用起来比较爽,上代码 c.h 1 #pragma once 2 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 void test(); 7 #ifdef __cplusplus 8 } 9 #endif c.c 1 #include "cplus.hpp" 2 #include "c.h" 3 4 void test() { 5 A *a = new B(); 6 a->test(); 7 } cplus.hpp 1 #pragma once 2 3 class A { 4 public: 5 virtual void test(); 6 }; 7 class B: publ...阅读全文

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

golang反射中函数和方法的调用

golang反射中函数和方法的调用 上一篇文章说到了golang中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要谈的。 反射中调用函数 众所周知,golang中的函数是可以像普通的int、float等类型变量那样作为值的,例如: package main import "fmt" func hello() { fmt.Println("Hello world!") } func main() { hl := hello hl() } prints: hello world! 既然函数可以像普通的类型变量一样可以的话,那么在反射机制中就和不同的变量一样的,在反射中函数和方法的类型(Type)都是reflect.Func,如果要调用...阅读全文

博文 2014-10-06 10:08:32 wowzai

go语言的chan

chan是一个FIFO队列,chan分成两种类型同步和异步同步的chan完成发送者和接受者之间手递手传递元素的过程,必须要求对方的存在才能完成一次发送或接受异步的chan发送和接受都是基于chan的缓存,但当缓存队列填满后,发送者就会进入发送队列, 当缓存队列为空时,接受者就会接入等待队列。 chan的数据结构: struct Hchan { uintgo qcount; // total data in the q uintgo dataqsiz; // size of the circular q uint16 elemsize; uint16 pad; // ensures proper alignment of the buffer that follows Hchan in mem...阅读全文

博文 2015-05-18 03:00:01 richmonkey

《The Way to Go》中文版《Go入门指南》

**《The Way to Go》**经原作者授权今日起以每日一小节的进度开始翻译,中文名**《Go入门指南》**。 本书以开源书籍的形式分享在Github上,提供给有需要的Go语言爱好者。 如果有翻译不当的地方,还望大家能够 **pull request** 以为本书提供更好的翻译质量。 repo地址:[https://github.com/Unknwon/the-way-to-go_ZH_CN][1] [1]: https://github.com/Unknwon/the-way-to-go_ZH_C...阅读全文

golang sync.Pool

Go 1.3 的sync包中加入一个新特性:Pool。 官方文档可以看这里http://golang.org/pkg/sync/#Pool 这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。 type Pool func (p *Pool) Get() interface{} func (p *Pool) Put(x interface{}) New func() interface{} Get返回Pool中的任意一个对象。 如果Pool为空,则调用New返回一个新创建的对象。 如果没有设置New,则返回nil。 还有一个重要的特性是,放进Pool中的对象,会在说不准什么时候被回收掉。 所以如果事先Put进去100个对象,下次Get的时候发现Pool是空也是有可能的。 ...阅读全文

博文 2014-10-29 08:00:01 seago123

golang的闭包和普通函数调用区别

先看一段程序 package main import ( "fmt") func main() { a := []int{1, 2, 3} for _, i := range a { fmt.Println(i) defer p(i) } } func p(i int) { fmt.Println(i) } 运行这段程序,输出结果为 1 2 3 3 2 1 这里就是普通的函数调用,每次调用func p时,完成 i 的值复制,然后打印,此时 i 值复制了3次,分别是1,2,3。由于defer是后进先出,所以执行变成3,2,1 下面我我们用闭包改写下程序: package mainimport ( "fmt")func main() { a := []int{1, 2, 3} for _, i ...阅读全文

博文 2014-10-04 19:26:14 liangDream

如何编写一个分布式数据库

大家好, 我是开源项目 分布式 NewSQL 数据库 TiDB 和 分布式缓存 Codis 的 创始人 刘奇, 之前在京东, 豌豆荚做 infrastructure 相关的事情, 现在在创业 (PingCAP), 方向是分布式数据库. 最近如果有朋友关注开源社区或者HackerNews 的话,可能会发现一个叫 TiDB 的数据库项目吸引了一些眼球(https://github.com/pingcap/tidb ) 。 这是我们开源的第一个东西,短短几天得到了过千Star,特别感谢大家的支持和鼓励。 今天主要介绍一下 NewSQL 与 TiDB 的设计实现, 未来的一些 Roadmap 以及 一些做开源项目的心得。 大家可能经常用数据库,但是很少写一个数据库(实在是有点 hardcore),今...阅读全文

博文 2015-09-24 10:26:00 刘奇

go package的理解

golang package是基本的管理单元, 同一个package下面,可以有非常多的不同文件,只要 每个文件的头部 都有 如 "package xxx" 的相同name, 就可以 在主方法中使用 xxx.Method()调用不同文件中的方法了。 文件夹名字可以和这个package 名称不一致, 比如我有个文件夹名字是mypackage,其中包含了a.go,b.go, c.go三个文件 : mypackage | --a.go | --b.go | --c.go 比如a.go中有 Saya(),b.go中有Sayb() 而几个文件共同的package name 确是testpackage 所以在 主函数中调用a.go 和b.go文件中的各自方法只要用,testpackage.Saya() ...阅读全文

博文 2015-04-24 00:00:00 rojas

golang调用dll

//调用方式 func WindowVersion1() { h, err := syscall.LoadLibrary("kernel32.dll") if err != nil { fmt.Printf("Error: %s\n", err) return } defer syscall.FreeLibrary(h) proc, err := syscall.GetProcAddress(h, "GetVersion") if err != nil { fmt.Printf("Error: %s\n", err) return } r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) major := byte(r) minor :=...阅读全文

博文 2014-10-04 19:27:11 陈好

Go中的指针与函数接收器

Go中使用*号表示指针,但是没有指针算数,不能对其进行加减。同时内存管理都由Go来负责,不需要拖动释放内存。 Go中的函数接收者,可以为值类型,也可以是引用类型。 看代码: package main import ( "fmt" ) type Rect struct { X, Y,Area,Length float64 } func (r *Rect) CalArea() { r.Area = r.X*r.Y } func (r Rect) CalLength() { r.Length = 2*(r.X+r.Y) } func main() { r1 := Rect{3, 4, 0, 0} r1.CalArea() r1.CalLength() fmt.Println(r1.Area) fm...阅读全文

博文 2015-03-24 14:00:00 baiyuxiong

Go 系列教程 —— 19. 接口(二)

欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。如果你还没有阅读前面的教程,请你阅读[接口(一)](https://studygolang.com/articles/12266)。 ### 实现接口:指针接受者与值接受者 在[接口(一)](https://studygolang.com/articles/12266)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实现接口。只不过在用指针接受者实现接口时,还有一些细节需要注意。我们通过下面的代码来理解吧。 ```go package main import "fmt" type Describer int...阅读全文

博文 2018-02-01 15:44:37 heyulong

Golang调用动态库so

测试动态库 test_so.h ``` int test_so_func(int a,int b); ``` test_so.c #include "test_so.h" ``` int test_so_func(int a,int b) { return a*b; } ``` 生成so ``` gcc -shared ./test_so.c -o test_so.so ``` 复制so文件到golang项目目录 golang项目目录,建立 load_so.h ``` int do_test_so_func(int a,int b); ``` load_so.c ``` #include "load_so.h" #include int do_test_so_func(i...阅读全文

博文 2017-09-15 03:56:05 1019459067

[Golang]网络游戏协议处理框架

简介:本文描述了使用Go语言实现的、适应于Go语言并发模型的一种支持多路复用的网络协议处理框架,并提供了框架的代码实现。作者将这种框架用于网络游戏服务器中的协议处理,但也可用于其他领域。应用背景: 在网络游戏服务器设计中,一般都会遇到协议多路复用的场景。比如登录服务器和玩家客户端之间有1:N的多个TCP连接;登录服务器和游戏服务器之间是1:1的TCP连接。玩家登录游戏的大致流程是这样的:玩家连接登录服务器登录服务器向数据库请求玩家数据登录服务器获取到玩家数据,把玩家数据转发给游戏服务器进行加载包括创建玩家对象等登录服务器获取到加载成功回应后,通知玩家客户端可以进入游戏世界在3和4中,因为登录服务器和游戏服务器通常只有一个TCP连接,所有玩家数据都是通过这个连接进行传输,所以需要从协议包中区...阅读全文

博文 2015-06-19 16:01:41 abv123456789

golang-otto JS解释器

otto是一个Go语言实现的JavaScript 解释器 otto是一个Go语言实现的JavaScript的语法分析器和解释器 1 2 3 import( "github.com/robertkrimen/otto" ) 在虚拟机中运行一些代码 1 2 3 4 5 vm := otto.New() vm.Run(` abc = 2+ 2; console.log("The value of abc is " + abc);// 4 `) 从虚拟机中获取一些值 1 2 3 value, err := vm.Get("abc") value, _ := value.ToInteger() } 设置一个数字变量 1 2 3 4 5 vm.Set("def", 11) vm.Run(` consol...阅读全文

博文 2015-11-17 02:00:03 shuanger_

Go 导入当前项目下的包

其实和其他语言很类似 import ( "../controllers" //这里就是导入上一级目录中的controllers "./models" //同一级目录中的models "./models/entitys" //当前目录下的entitys "../../routers" //上两级目录的routers ) 当然也可以把写好的组件放入$GoPath的src中,这样就不需要关心目录是哪一层,只需要类似这样调用就好了: import ( "myproject/controllers" //这里就是自己项目的名字+包名 ...阅读全文

博文 2017-01-24 03:00:03 KelvinQ

golang获取调用者的方法名及所在源码行数

package main import "runtime" import "log" func main() { test() } func test() { test2() } func test2(){ pc,file,line,ok := runtime.Caller(2) log.Println(pc) log.Println(file) log.Println(line) log.Println(ok) f := runtime.FuncForPC(pc) log.Println(f.Name()) pc,file,line,ok = runtime.Caller(0) log.Println(pc) log.Println(file) log.Println(line) log....阅读全文

博文 2015-02-04 03:00:00 wangxusummer

go中方法的接收者是值或者指针的区别

值类型的变量和指针类型的变量先声明一个结构体:type T struct { Name string } func (t T) M1() { t.Name = "name1" } func (t *T) M2() { t.Name = "name2" }12345678910111234567891011M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方法内都是改变Name值。下面声明一个 T 类型的变量,并调用 M1() 和 M2() 。 t1 := T{"t1"} fmt.Println("M1调用前:", t1.Name) t1.M1() fmt.Println("M1调用后:", t1.Name) fmt.Println("M2调用前:", t1.Name...阅读全文

博文 2016-07-27 15:00:02 zlingh

go调用exe

//调用exe func callEXE1() { arg := []string{} cmd := exec.Command("test", arg...) //会向 cmd.Stdout和cmd.Stderr写入信息,其实cmd.Stdout==cmd.Stderr,具体可见源码 output, err := cmd.CombinedOutput() if err != nil { fmt.Println("Error:", err) return } fmt.Printf("callEXE2结果:\n%v\n\n%v\n\n%v", string(output), cmd.Stdout, cmd.Stderr) } func callEXE2() { arg := []string{}...阅读全文

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

go中方法的接收者是值或者指针有什么区别吗?

参考文章:http://studygolang.com/articles/1113 希望解决的问题如下 假设有两个方法,一个方法的接收者是指针类型,一个方法的接收者是值类型,那么: 对于值类型的变量和指针类型的变量,这两个方法有什么区别? 如果这两个方法是为了实现一个接口,那么这两个方法都可以调用吗? 如果方法是嵌入到其他结构体中的,那么上面两种情况又是怎样的? 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" } func (t *T) M2() { t.Name = "name2" } M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两...阅读全文

博文 2015-06-17 23:08:13 u013790019

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

D、GO、Rust 谁会在未来取代 C?为什么?

不要管我的地位和 D 语言创造者之一的身份。我会坦诚的回答这个问题。我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里。我鼓励人们在 Rust 和 Go 社区相似职位的人可以提出他们诚恳的观点。接着,我们开始吧。 首先,C++ 应该放在问题的哪个位置。不管它是否取代 C,或是成为取代 C 的候选人之一,C++ 是这个等式的一个关键部分。它是最接近 C 的,同时也是从 C 中来的。在下面几个问题中我会假设 C++ 是把取代 C 作为目标的。 每一个语言都有一些基础优势(我称之为“十倍优势”,因为在一定的基准上比较其他确实效率更高)和数个挑战。这些语言在未来能否取代 C 语言取决于它们如何利用它们的十倍优势,并且如何克服他们的数个挑战...阅读全文

博文 2015-11-10 19:00:00 babybright123, coding12, 你是晴天, 弃天帝, 机智的祺祺, Iam魔方

golang中的类和接口的使用

类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("************************* say hi !!") } func (this *LoginController) Get() { p := new(People) p.SayHi() this.TplName = "login.html" } 接口使用:实现上面功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("*************************...阅读全文

博文 2016-04-26 01:00:00 vipstone

Golang 中函数和方法的区别

golang 函数以及函数和方法的区别 原创 2016年12月11日 20:12:54 4363 在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。到底什么意思呢。 首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例 func main() { fmt.Println("Hello go") } 在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但...阅读全文

博文 2018-01-23 22:33:04 coder_kev

golang arm 交叉编译

set GOOS=linux set GOARCH=arm cd go/src make.bat cd .. cp bin/%GOOS%_%GOARCH% %GOROOT%/bin -r cp pkg/%GOOS%_%GOARCH% %GOROOT%/pkg -r cp pkg/tool/%GOOS%_%GOARCH% %GOROOT%/pkg/tool -r 使用百度手机助手,开启USB调试:点击多次“版本号”,开发者选项->启用USB调试 使用百度手机助手的bdadb.exe shell,进入后su,手机上赋予root权限 cp /sdcard/download/linux_hello /data/ chmod 777 /data/linux_hello (sdcard是fat32格式,...阅读全文

博文 2015-03-17 09:00:01 chuqingq

golang并发编程实践 -- 简单生产者消费者(with chan)

本文简单介绍如何用golang实现经典的生产者消费者模型。 golang语法简洁,凡可以通过几行代码解决的事情,绝不为了解决该问题而在语言中引入不必要的特性。这个和c++正好相反,c++是个庞大的怪物,我这么形容可能很多c++的fans心里要不舒服了,为了让你在看到诸如子类言论时能够心平气和,建议大家使用一下golang吧。本文不是介绍golang编程语言本身的文章,而是从golang如何让并发编程变得容易...阅读全文

博文 2014-10-04 19:26:04 aura521521

为什么Go在中国这么流行?

文章根据谷歌的trends,国内Go相关网站的Alexa以及Baidu的golang搜索排名等分析Go在中国流行的可能原因。其中提到本社区:studygolang.com 是中国Go社区的领跑者。 看到这篇文章很激动,很久没有维护该社区了,接下来会好好维护,争取做成Golang在国内最好、最大的社区。 文章地址:[why-is-go-popular-in-china](http://herman.asia/why-is-go-popular-in-china) ...阅读全文

Go调用C++代码相关资料

swig开源项目([http://www.swig.org](http://www.swig.org))为多种编程语言提供了相互访问的接口生成工具,这里面也包含了为go语言生成调用C、C++代码的功能。Go语言自带的cgo工具已经支持对C代码的调用,但对C++代码的支持确实不行,所以Go1已经把swig的C++这部分功能作为附带功能加入(参见Go源代码\go\misc\swig)。这样,C++这块的资源也可以被Go语言使用了。 1、[SWIG And Go](http://www.swig.org/Doc2.0/Go.html) 2、[使用swig工具为go语言生成调用C、C++代码例子](http://my.oschina.net/qinhui99/blog/64270) ...阅读全文

golang中调用C

项目中项目基本是golang,因为以前的一个库不太好用golang重写,所以只能使用cgo来调用,稍微记录一下 看使用文档 重要的事情说多遍都不为过,一定要仔细看文档: https://github.com/golang/go/wiki/cgo 注意cgo的注释和 import “C”之间不能有空行!!! Note that there must be no blank lines in between the cgo comment and the import statement. package main /* #include int test() { return 2016; } */ import "C" import "fmt" func main() { ...阅读全文

博文 2016-05-19 05:00:02 qq_33204116

golang动态调用方法

package main import ( "fmt" "reflect" ) type YourT1 struct { } func (y *YourT1) MethodBar() { fmt.Println("MethodBar called") } type YourT2 struct { } func (y *YourT2) MethodFoo(i int, oo string) { fmt.Println("MethodFoo called", i, oo) } func InvokeObjectMethod(object interface{}, methodName string, args ...interface{}) { inputs := make([]reflect....阅读全文

博文 2014-10-04 19:26:16 ziyouchutuwenwu

golang rpc的两种调用方法

golang的rpc有两种方法进行调用,一种是rpc例子中给的:package main import ( "net/rpc" "net/http" "log" "net" "time" ) type Args struct { A, B int } type Arith int func (t *Arith) Multiply(args *Args, reply *([]string)) error { *reply = append(*reply, "test") return nil } func main() { arith := new(Arith) rpc.Register(arith) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1...阅读全文

博文 2014-10-21 22:33:26 yjf512

GO语言结构体方法跟结构体指针方法的区别

首先,我定了三个接口、一个结构和三个方法: type DeptModeA interface { Name() string SetName(name string) } type DeptModeB interface { Relocate(building string, floor uint8) } type Dept struct { name string building string floor uint8 Key string } func (self Dept) Name() string { return self.name } func (self Dept) SetName(name string) { self.name = name } func (self *D...阅读全文

博文 2017-01-18 16:00:08 tree2013

MQTT 代理 SurgeMQ

SurgeMQ 旨在提供 MQTT 代理和客户端开发包,完全兼容 MQTT sepc 3.1.1,此外尝试兼容 3.1。SurgeMQ 目前开发活跃,在一台 4 核 2.8G i7 处理器的 MBP 上性能可达: * **over 400,000** MPS in a 1:1 单发布者和生产者配置 * **over 450,000** MPS in a 20:1 fan-in configuration * **over 750,000** MPS in a 1:20 fan-out configuration * **over 700,000** MPS in a full mesh configuration with 20 clients ![image](http://st...阅读全文

Go json包简单教程

Go生成json和解json数据都很简单,通过官方的“encoding/json”包,调用json.Marshal( )生成数据,调用json.Unmarshal( )或json.NewDecoder.Decode( )解析数据。 package main import ( "encoding/json" "fmt" "io" "os" "strings" ) type Order struct { Name string `json:name` OrderItem []Item `json:item` OrderRefund []Refund `json:refund` } type Item struct { Name string `json:name` Oid int `json:o...阅读全文

博文 2016-12-14 13:00:05 吃一堑消化不良

go 对windows api的调用

package main import ( "syscall" ) func abort(funcname string, err string) { panic(funcname + " failed: "+err) } func print_version(v uint32) { major := byte(v) minor := uint8(v >> 8) build := uint16(v >> 16) print("windows version ", major, ".", minor, " (Build ", build, ")\n") } func main() { h, err := syscall.LoadLibrary("kernel32.dll") if err!=n...阅读全文

博文 2014-10-04 19:26:01 jingshishengxu

golang http client使用unix domain socket

 func fakeDial(proto, addr string) (conn net.Conn, err error) { return net.Dial("unix", sock) } tr := &http.Transport{ Dial: fakeDial,} client := &http.Client{Transport: tr} resp, err := client.Get(http://d/test) 注意Get/Post调用的必须是一个有效的url, (http://xxxx.xxx/path not unix://...), 这里的域名没有意义, 不会用来连接...阅读全文

博文 2015-06-22 20:01:26 linsanhua

golang 子类调用父类函数

// testStruct project main.go package main import ( "fmt" ) type A struct { Text string } type Operator interface { Say() } func (a *A) Say() { fmt.Printf("A::Say():%s\n", a.Text) } type B struct { A } func (b *B) Say() { b.A.Say() fmt.Printf("B::Say():%s\n", b.Text) } func main() { b := B{} b.Text = "hello,world" b.Say() } A::Say():hello,worldB::S...阅读全文

博文 2015-11-03 12:00:30 lcj0304

go语言生产者,消费者事例

package main import "fmt" import "time" func main() { // ch := make(chan int, 10) ch := make(chan int) go produce("生产者1",ch) go produce("生产者2",ch) time.Sleep(1 * time.Second) go use(ch) time.Sleep(101 * time.Second) } func produce(pname string,ch chan int) { for i:= 0;i < 20;i++ { fmt.Println("produce", pname ," : ", i) ch <- i // 这里需要在打印语句之后,否者可能产...阅读全文

博文 2014-10-23 18:00:00 eclipser1987

Go 语言机制之栈和指针

## 前言 本系列文章总共包括 4 篇,主要帮助大家理解 Go 语言中一些语言机制和其背后的设计原则,包括指针、栈、堆、逃逸分析和值传递/地址传递。这一篇是本系列的第一篇,主要介绍栈和指针。 以下是本系列文章的索引: 1. [Go 语言机制之栈与指针](https://studygolang.com/articles/12443) 2. [Go 语言机制之逃逸分析](https://studygolang.com/articles/12444) 3. [Go 语言机制之内存剖析](https://studygolang.com/articles/12445) 4. [Go 语言机制之数据和语法的设计哲学](https://studygolang.com/articles/12487) ## ...阅读全文

博文 2018-02-26 11:11:18 polaris

go 速学 - 14 - 反射

目录 反射 reflection 使用反射 前提 定义一个结构及方法 反射所有字段及方法 访问结构中的匿名字段 动态修改属性的值 动态调用方法 摘要 使用反射,匿名字段,动态修改属性,动态调用方法 反射 reflection 使用反射 前提 使用反射之前必须引用包 reflect 定义一个结构及方法 import "reflect" type User struct { Id int Name string Age int } func (u User) say() { fmt.Println("hello") } u := User{Id: 1, Name: "Peter", Age: 20} 反射所有字段及方法 reflect.TypeOf(o) 用于获得类型原型 reflect.Val...阅读全文

博文 2015-05-01 23:00:00 mrseasons

golang: Martini之inject源码分析

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。在传统的程序设计过程中,调用者是自己来决定使用哪些被调用者实现的。但是在依赖注入模式中,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由注入器来完成,然后注入调用者,因此也称为依赖注入。 inject 是依赖注入的golang实现,作者是 codegangsta 。它能在运行时注入参数,调用方法。是Martini框架的基础核心。 我对依赖注入提取了以下2点性质: 由注入器注入属性。 由注入器创建被调用者实例。 在inject中,被调用者为func,因此注入属性也即对func注入实参(当然inject也可以注入struct,这样的话注入的属...阅读全文

博文 2014-10-04 19:27:00 陈一回

GO-回调函数

1,什么是回调函数。一个函数中有个参数为函数的指针。该函数自己调用自己指针函数即可; 2,为什么要使用回调函数。抽象画了一个函数,简洁代码。异步执行 3,例子: // HuiDiaoFunc project main.go package main import ( "fmt" ) //函数 里面有个两个参数的回调函数 func print(call func(a int, b int) int) { fmt.Print(call(2, 1)) } func main() { //调用函数,回调函数里面的内容自己随便写 print(func(a int, b int) int { return a + b }) print(func(a int, b int) int { return a ...阅读全文

博文 2016-03-11 14:00:08 shuanger_