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

golang语法总结(八):类型零值、类型别名、类型转换

类型零值 变量声明为某种类型后的值就为该类型的零值,它不是空值。通常数值类型默认为0,bool为false,string为空字符串 类型别名 比如: type text stringfunc main() { var t text = "hello world" fmt.Println(t)} 类型转换 Go语言不存在隐式转换,必须显式转换,并且只能在两种相互兼容的类型间转换,转换示例: a := 3.14b := int(a)fmt.Println(b)var c int32 = 256var d = float64(c)fmt.Println(d...阅读全文

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

golang中map的值引用问题

先给出一个例子 package mainimport ( "fmt")type string_map map[string][]stringfunc main() { map1 := make(string_map) map1["one"] = []string{"one"} //先赋值 one := map1["one"] //把赋值的映射使用一个变量表示 one = []string{"two"} //给这个变量赋另外的值 fmt.Println(one) fmt.Println(map1)} 结果如下: [two]map[one:[one]] 问题出现了,当使用一个变量来表示map里面的映射时,是类似于值引用的方式,变量的改变不影响map里面映射的值 所以这里需要注意了,这里golan...阅读全文

博文 2014-10-04 19:26:02 ssor

go-logging的使用

logging包实现了Go的日志记录基础设施。 其输出格式是可自定义的,并支持不同的日志后端,如syslog,文件和内存。 可以使用多个后端,每个后端和记录器具有不同的日志级别。 这是官方的例子: package main import ( "os" "github.com/op/go-logging" ) var log = logging.MustGetLogger("example") // Example format string. Everything except the message has a custom color // which is dependent on the log level. Many fields have a custom output // f...阅读全文

博文 2017-09-01 06:31:03 code_segment

北京招聘golang工程师

工作地点: 北京市通州区马驹桥环科中路16号66号楼2层 待遇福利: 包吃包住.衣食无忧 24寸大宽屏显示器(竖屏 代码专用) 还有详谈....... 岗位要求: 有2年及以上开发工作经验(如果优秀可以发github or code) 熟悉Linux工作环境,熟悉MySql、Redis等数据库编程,golang能够独立开发 熟悉网络协议,Socket协议 具有高负载、高并发开发设计经验值者优先考虑 拥有扎实的计算机编程能力,尤其在数据结构、算法和代码、软件设计方面有较好的功底 工作积极主动、擅于思考问题,能够主动沟通与解决问题 职位描述: 参与并负责公司服务端开发(linux + golang) 公司名称: 北京微梦灵动科技有限公司 邮件...阅读全文

go是函数式编程语言吗?

2012-05-19 翻译自这里, 对原文有所扩展, 也有所删减. go是函数式编程语言吗? 不是, 当然不是. 那么, go提供函数吗? 是的, 当然, 大多数编程语言都提供函数, go也不例外. 不相信吗? 我会用代码让你闭嘴: func SayHello() { fmt.Println("Hello") } 看见了吧. go使用关键字func定义函数, 并在函数体中编写函数逻辑. go函数可以接受参数吗? 嗯, 我又看到一个白痴的问题, 呵呵. 哦, 我懂了, 也许是我的SayHello函数给大家造成了错觉, 我会改造我的代码: func SayHelloToSomeone(name string) { fmt.Println("Hello " + name + ".") } 函数Sa...阅读全文

博文 2014-10-04 19:26:45 cool-xing

goLang异常处理

defer defer是go提供的一种资源处理的方式。defer的用法遵循3个原则在defer表达式被运算的同时,defer函数的参数也会被运算。如下defer的表达式println运算的同时,其入参i也会被运算,结果为初始化值0,故defer调用中会打印“0” func a() { i := 0 defer fmt.Println(i) i++ return defer函数在一个函数return之后遵循后进先出的调用原则,如下打印结果为3210 func b() { for i := 0; i < 4; i++ { defer fmt.Print(i) } } defer函数可能会读取并赋值给所在函数的返回值,如下返回值为2 func c() (i int) { defer func() ...阅读全文

博文 2018-07-16 12:34:49 一个简单搬运工

年中记录与挖坑

记录李航大佬说过(原文链接) 计算机上达到和人同等的对话能力还非常困难。现在的技术,一般是数据驱动,基于机器学习的。 单轮对话有基于分析的,基于检索的,基于生成的方法。 好吧, 我也感觉基于检索的是low的, 但是现在各家智能音箱貌似都没有突破这个坎. 大家听到的siri的b-box, 背后是一个无聊的逗逼程序员; 小爱同学的惊人语录, 写语料也许是一群抠脚大汉. 这半年的工作, 主要集中在开发一个基于检索的语义理解平台, 最近几天刚刚完成了第三版的进化. 初代目 去年年底, 刚来这里接手这项工作的时候, 老大给我的架构是简单的纯检索, 基于ES, 把事先编好的模板写到搜索引擎里. 每次收到前台请求, 将asr获得的文本扔到ES里搜, 一开始模板量比较少的时候, 分类效果挺不错的, 甚至还有...阅读全文

博文 2018-09-01 16:35:00 MashoO

阿里云云翼计划——学生党 9.9 /月,续费同价

![9.9元学生机.jpg](http://studygolang.qiniudn.com/150916/3df507803b53834772eb5d4cd32e88f7.jpg) 地球上有一种行为叫YY, 扎克伯格,大二的时候YY想要创立社交网站,于是就有了脸书; 比尔盖茨,20岁的时候YY决心投身计算机行业,于是就有了微软; 陈欧,大学期间靠着YY的信念和鱼丸粗面,创立了聚美; 王兴,大学期间的大学霸,更是YY着创造了校内/饭否/美团的互联网三大杀器; 而你,同样是一名大学生,相信你也有许多YY的突发奇想; 别担心,趁年轻,YY吧!也许下一秒就是你的突发奇想改变了世界! 而阿里云云翼计划就是成就你不同凡“想”的好机会:http://clic...阅读全文

Java构造函数与Go构造函数的不同

因为Java的构造函数是不需要返回值的,所以一般是参数较多的构造函数调用参数较少的构造函数,然后继续赋值。 比如: public Student(String name){ this.name = name ; this.age = 10 ; } public Student(String name , int age ){ this(name) ; this.age = age ; } 而Go语言需要返回值,所以经常是参数较少的调用参数较多的构造函数,在调用时传入一个默认值。 所以代码可能是这样: func NewStudentWithAge(name string , age int) *Student{ return &Student{name :name,age :age } ; }...阅读全文

博文 2015-01-21 22:00:01 itfanr

Go 根据字符串调用指定函数

随学随记,留备查 1、初学web设计,暂不想使用第三方库;于是乎HandleFunc()写的满屏都是……就想着模拟MVC思想,根据URL的路径自动调用指定的控制器方法,岂不是很好; 2、尝试使用Go的反射功能,初步实现了原理算法; 3、需要引入“reflect”包,使用reflect.ValueOf()方法,这里必须传入参数地址,否则其返回的reflect.Value类型只能查询到静态声明的方法,不能得到动态绑定的方法; 4、即使传入参数地址,其返回的reflect.Value类型,也得不到方法名;Go的意思应该是值和类型分开处理,在类型里面才有名称等信息; 4、需要再次调用返回值的Type()方法,这样就可以查询方法名称; 5、然后将方法名称和方法指针存入Map中,后续通过Map[name...阅读全文

博文 2016-08-13 22:00:06 HOOKTTG

微服务组件之限流器与熔断器

在微服务架构里面一个很常见的问题就是服务之间的延迟和通信失败问题,极端的情况下,甚至会因为某个服务的性能下降或者故障宕机,导致访问超时,层层传递,引发雪崩,最终导致整个系统崩溃,而限流器和熔断器(这两个组件都是客户端的)能很好的解决这个问题,提高系统的可靠性和稳定性 限流器 限流器,从字面上理解就是用来限制流量,有时候流量突增(可预期的比如“双11”,不可预期的微博的热门话题等),会将后端服务压垮,甚至直接宕机,使用限流器能限制访问后端的流量,起到一个保护作用,被限制的流量,可以根据具体的业务逻辑去处理,直接返回错误或者返回默认值等等 golang 提供了拓展库(golang.org/x/time/rate)提供了限流器组件,用法上也很简单直观,通过下面这段代码就可以创建一个限流器 // 每...阅读全文

博文 2018-06-21 18:34:39 hatlonely

go的语言特性总结

Go的语言特性总结 写在前面: 近来关于对Golang的讨论有很多,七牛的几个大牛们也断定Go语言在未来将会快速发展,并且很可能会取代Java成为互联网时代最受欢迎的编程语言。Go语言是google推出的编程语言,在已经成功的给世人创造了改变人们生活的操作系统之后,google似乎感觉有必要再为世人带来一款强大的编程语言,而Go语言依靠自己众多友好的特性也不负众望正在被开发者接触,我有幸在学习高性能并发编程的时候认识了Go语言,在了解了Go的一些特性之后决定系统的学习一番。我发现关于Go的学习资料并不多,以至于我需要自己写一些东西。这里的内容大多来自七牛团队的《Go语言编程》一书。这里也会按照书中组织的章节进行学习。当然如果一些知识点事互联网上已经有的,这里直接进行转载了。 -Written...阅读全文

博文 2016-03-13 22:00:02 qq_15437667

[golang note] 匿名组合

匿名组合 golang也提供了继承机制,但采用组合的文法,因此称为匿名组合。与其他语言不同, golang很清晰地展示出类的内存布局是怎样的。 • 非指针方式组合 ▶ 基本语法 // 基类 type Base struct { // 成员变量 } func (b *Base) 函数名(参数列表) (返回值列表) { // 函数体 } // 派生类 type Derived struct { Base // 成员变量 } func (b *Derived) 函数名(参数列表) (返回值列表) { // 函数体 } ▶ 继承规则 √ 在派生类没有改写基类的成员方法时,相应的成员方法被继承。 √ 派生类可以直接调用基类的成员方法,譬如基类有个成员方法为Base.Func(),那么Derived.F...阅读全文

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

Golang中如何模拟C语言中的if(scanf(…)==EOF)来控制输入的终止

相信很多从C/C++转到Golang的朋友们都经常会对Go中的输入控制感到头疼。。。尤其是如果要在Go中模拟C语言中的如下代码会遇到不小困惑: char input[100]; while (1) { if (scanf("%s", input) == EOF) { printf("输入结束\n"); break; } } 上面这段代码在控制台中输入一个Ctrl+Z(EOF) 就可以终止输入了: C语言中的 int scanf() 函数返回的是一个int类型,它的值只有三种情况: (1) 如果一切正常,返回输入的字符个数,即值>0 (2) 如果出现错误,返回0 (3) 如果遇到结束符EOF,返回-1 注意第三条:遇到结束符会返回-1,这样就会结束输入。也就是说,如果我们输入EOF(EOF其实...阅读全文

博文 2014-10-21 20:00:01 u011774512

golang 基础(5)函数的返回值

square-gopher.png 在 go 语言中函数支持多个返回值 func div(a, b int) (int, int){ return a /b , a %b } 我们也可以给函数返回值打上标签 q, r func div(a, b int) (q,r int){ return a /b , a %b } 我们可以用两个变量来接受函数返回值 a, b := div(17,3) 如果我们只想使用一个返回值,也就是 a 而不使用 b,向下面这样做会在编译时报错,go 语言是比较严格语言 strict-inspection.jpg a, b := div(17,3) fmt.Println(a) 应该修改为,通过 _ 占位符来忽略掉不使用的变量 a, _ := div(17,3) fm...阅读全文

golang 调用 c++ DLL 如何获取 dll 返回的 string 类型值

我用 golang 调用 c++ dll,调用成功,传值成功(代码省略其他无用的,仅细节代码): ``` inst := syscall.MustLoadDLL("test.dll"); some_func := inst.MustFindProc("test_function"); s1: = "aaa" // 传递参数给 c++ dll s2:= "bbb" // 传递参数给 c++ dll s3:="" // 我希望从这个参数得到返回值 some_func.Call( uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s1), uintptr(u...阅读全文

游戏答题神器qanswer

答题神器:《冲顶大会》,《百万英雄》等答题游戏的答题神器,顺利吃鸡! 通过抓取手机屏幕截图经过文字识别,结合搜索引擎给出一个参考值。 [![题目](https://github.com/silenceper/qanswer/raw/master/docs/screenshot.png)](https://github.com/silenceper/qanswer/blob/master/docs/screenshot.png) 分析结果: [![结果](https://github.com/silenceper/qanswer/raw/master/docs/answer.png)](https://github.com/silenceper/qanswer/blob/master/...阅读全文

gossdb终于可以全速前进了

用了一周的时间才最终找到了一个会在大并发(并发1000,mbp普通本)下可能会发生的空指针问题,现在经过多次测试,终于可以关闭这个bug了。哈哈,高兴啊。 现在的gossdb已经相对成熟了,而且用的人也越来越多了,希望在这里介绍给大家,如果有人用ssdb,不妨尝试一下,会有惊喜的。 下面简单的介绍一下gossdb https://github.com/seefan/gossdb 功能列表 1. 继承官方连接方式。已支持超过40个官方命令。 2. 支持连接池。 3. 已支持 set 相关方法 4. 已支持 hashmap 相关方法 5. 已支持 queue 相关方法 6. 已支持返回值类型转换,可以方便的把从ssdb中取到的内容转化为指定类型。 连接池已支...阅读全文

Tango,微内核可扩展的Go语言Web框架

转自 [lunny的博客](http://lunny.info/2015/01/07/1-Tango-micro-and-pluggable-web-framework-for-Go.html) # 简介 Golang的web框架基本上处于一个井喷期,那么为什么要再造一个轮子。这是因为,目前可扩展性比较强的都是基于函数作为可执行体的,而以结构体作为执行体的框架目前可扩展性都不够强,包括我原先写的框架xweb也是如此。因此,一个全新的框架出来了,先上地址:[https://github.com/lunny/tango](https://github.com/lunny/tango)。 初看Tango框架,感觉和Martini及Macaron非常的像。比如这段代码: ``...阅读全文

go语言中var

go语言中定义变量使用关键字var,如:var x int=4 也可以写成x:=4; 在函数中,:= 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。 (:= 结构不能使用在函数外,函数外的每个语法块都必须以关键字开始。) package main import ( "fmt" ) func main() { var x int = 4 fmt.Println(x)//输出4 fmt.Println(&x)//输出指针 //fmt.Println(*x) //错误 y := 4 fmt.Println(y)//输出4 fmt.Println(&y)//输出指针 //fmt.Println(*y) //错误 var v *int = new(int)//返回值为指针 fmt.Prin...阅读全文

Go语言接口开发——不确定JSON数据结构的解析

在公司主要做接口的开发,会经常遇到接口对接的情况。有的时候,同一个请求返回的JSON数据格式并不一样。如果是正常,则可能只返回一个status字段,说明正常;如果中间出错,除了在status字段里面说明错误类型,还会通过error_message附带错误详细信息。比如要给用户加积分,如果加分失败,还会附带用户id等信息。那么,请求一个接口可能的返回值就是不确定的。 我最初就是定义两个结构体,我处理的数据都共有一个字段status,如果能够解析并且status表示操作成功,那么用封装成功内容的结构体解析;否则,用封装失败的结构体解析。这就是传说中的DIRTY HACK。。。 后来,偶然发现封装正确的结构体也会解析错误的字符串,当然,只会解析共有字段。那么,这个问题就好解决多了。把两个结构体放到...阅读全文

fmt包的Println,Printf和Sprintf的区别

fmt包实现了格式化的I/O,其功能类似于C的printf和scanf。这是官网给出的解释。 **Println:** 1. 用默认的类型格式显示方式将传入的参数写入到标准输出里面(即在终端中有显示), 2. 多个传入参数之间使用空格分隔, 3. 在显示的最后追加换行符, 4. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Printf:** 1. 用传入的格式化规则符将传入的变量写入到标准输出里面(即在终端中有显示), 2. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Sprintf:** 1. 用传入的格式化规则符将传入的变量格式化,(终端中不会有显示) 2. 返回为 格式化后的字符串。 ``` go testStr := []byte("test str"...阅读全文

博文 2018-11-08 09:49:02 lijingtian

Go语言defer的使用

载:http://cloudnil.com/2014/05/19/defer-in-go/ Go语言中没有类似于java中的try…catch…finally的语句块,但是却有一个非常优雅的defer。 defer关键字用来标记最后执行的Go语句,一般用在资源释放、关闭连接等操作,会在函数关闭前调用。 多个defer的定义与执行类似于栈的操作:先进后出,最先定义的最后执行。 在defer的使用中,碰到过许多坑,尤其是在defer与匿名函数搭配使用的时候,本文就来讲讲这些坑。 请先看下边几段代码,然后判断一下各自输出内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32...阅读全文

博文 2015-04-16 13:00:05 yugongpeng_blog

[go语言]使用defer和有名返回值,实现初始化失败的自动回滚

稍微复杂一些的程序的初始化会涉及到多个模块,任何一个模块初始化失败以后,就应该把已经初始化的其他模块一一回滚。这容易使得初始化的错误处理比较冗长,包含重复代码;或者执行路径跳转不容易读懂,也容易出错。用go语言提供的defer和有名返回值的机制,可以比较容易地解决这个问题,让初始化错误处理简洁清晰。 先看看一种常见的错误处理代码: func Initialize() error { var err error err = init_a() if err != nil { return err } err = init_b() if err != nil { uninit_a() return err } err = init_c() if err != nil { uninit_b() un...阅读全文

博文 2014-10-28 18:43:18 stevewang

GO语言学习笔记(一)

每个Go源码文件开头都是package声明,表示Go代码所属的包要生成Go的可执行程序,需要定义一个main的包,同时创建main目录外部参数传入用os模块的os.Args方法获取,os.Args接收的参数下标从1开始 package main import ( "fmt" "os" ) func main(){ fmt.Println("Hello Test") fmt.Println(os.Args[1]) } 在函数返回时没有被明确赋值的返回值会被设置成默认值,例如float类型返回值会被设置成0.0,error类型返回值会被设置成为nil6g和6l是64为版本的Go编译器和链接器,32为版本的编译器和连接器是8g和8l,gcc版本的编译器是gccgo 6g helloworld.go...阅读全文

博文 2014-10-11 13:00:06 YaphetS_xiaoyang

Weed-FS之Volume数据迁移

【Weed-FS又名叫Seaweed-FS】, 本篇主要是关于数据迁移相关的内容, 更详细的源码相关的请看分布式存储Weed-FS源码分析。 很多刚开始接触 Weed-FS 但是又不熟悉它的用户经常会使用以下的方式启动 weed 集群。 weed master -mdir="/tmp/mdata" -defaultReplication="001" -ip="localhost" -port=9334 weed volume -dir=/tmp/vol1/ -mserver="localhost:9334" -ip="localhost" -port=8081 weed volume -dir=/tmp/vol2/ -mserver="localhost:9334" -ip="localho...阅读全文

博文 2015-02-15 18:31:49 YanyiWu

Go flag包

一、命令行语法 命令行语法主要有以下几种形式: cmd -flag //只支持bool类型 cmd -flag=x cmd -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号是一样的 对于整形flag,合法的值可以为1234,0664,0x1234或负数等。对于布尔型flag,可以为1,0,t,f,T,F,true,false,TRUE,FALSE,True,False等 二、命令行参数方法 (1)定义flag参数 参数有三个:第一个为参数名称,第二个为默认值,第三个是说明 (1) 通过flag.String(),Bool(),Int() 等flag.Xxx()方法,该种方式返回一个相应的指针 var ip = flag.Int("flagname", 1234, "h...阅读全文

博文 2016-12-01 12:00:02 吃一堑消化不良

系统调用在 Golang 中的实践-syscall.Mmap()

在看一些其它语言实现的基础工具时,时而发现其中有我们需要的某项特殊功能。究其源码,一般会看到两种底层实现:汇编、系统调用。这里的系统调用就是我们今天的主角了。 系统调用 image.png 系统调用在操作系统中占有重要的地位,是内核对外交互的门户,为我们提供了与底层资源交互的相对简单、安全的方式,给我们提供了一种在用户态、内核态切换的手段。 我们写的程序,通常是跑在用户态的,它对应 CPU 的 Ring 3 保护级别,而内核运行在 Ring 0 级别,拥有更高的权限。相应的,内核的代码可以运行一些用户态代码无法运行的 CPU 特权指令,实现一些用户态的代码做不到的事情,比如:控制进程的运行,使用驱动操作机器上的硬件。内核将部分自己实现的功能进行封装, 形成相对统一、方便的接口给我们进行调用,...阅读全文

博文 2018-08-07 01:34:52 豆瓣奶茶

Golang九大特性

强类型静态编译型语言。 更丰富的内置类型 函数多返回值 在C中如果想返回多个值,通常会在调用函数中分配返回值的空间,并将返回值的指针传给被调函数。Go的做法是在传入的参数之上留了两个空位,被调者直接将返回值放在这两空位。Go是使用栈空间来返回值的。而常见的C语言是通过寄存器来返回值的。 错误处理 defer、panic、recover 匿名函数和闭包 Go中的函数也可以作为参数进行传递,拥有函数名的函数只能在包级语法块中被声明,而闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。 类...阅读全文

博文 2018-08-21 16:35:18 Sequin小红九

Go 语言的错误处理

Go 语言的错误处理是基于明确的目的而设计的。你应该从函数中返回所有可能的错误,并且检查/处理这些返回值。和其他语言相比,这一点可能看起来有些繁琐和不人性化,其实并不是这样的。让我们来看看一些基本的例子,然后继续做一些较重要的事情。 ## Non 错误 实际上 Go 有个概念 non-error。这是一个语言特性,不能用在用户自定义函数中。最明显的例子就是从 map 中通过 key 获取值。 ```go if val, ok := data["key"]; ok { // key/value 在 map 中存在 } ``` 当尝试获取指定 key 的值的时候,会返回一个可选的第二个值,是一个 boolean 类型表示获取的值是否存在。 ```go func main() { a := map...阅读全文

博文 2018-02-23 17:10:38 polaris

golang 如何解析url中的多个参数

以下面的url为例,这个例子实际上是《go语言圣经》中7.7章节http.handler的一个例子。我们需要更新袜子socks的价钱为16,鞋子shoes的价格为100。我们把它们写到同一个url中。对于这种一个url有多个参数的情况该如何处理呢? http://localhost:8000/update?item=socks&price=16&item=shoes&price=100 使用如下的代码来查看请求参数。req.URL.Query()的返回值是Values类型,这个类型实际上是type Values map[string][]string,因此我们可以遍历这个map。 func (db database) update(w http.ResponseWriter, req *ht...阅读全文

博文 2020-04-21 17:36:02 yufeifly

Go之获取Windows下文件是否隐藏

起初,做了个小程序,用来检测磁盘中所有的文件 package main import( "fmt" "io/ioutil" "os" ) var dirpath ="D:\\" func main(){ CheckDir(dirpath) } func CheckDir(dirpath string){ dirs, err := ioutil.ReadDir(dirpath) if err !=nil{ panic("目录输入有误!") } for _, dir := range dirs { if dir.IsDir(){ if dir.Name()=="System Volume Information"{ fmt.Println("检测目录:", dirpath+"\\"+dir.Na...阅读全文

博文 2015-01-31 03:00:01 anbylau2130

Golang中的自定义函数

不管是面向过程的编程,还是面向对象的编程,都离不开函数的概念,分别是,参数,函数名,返回值。接下来我们看看Go语言在这三个方面是做怎么操作的吧。 参数 谈到参数,我们在写函数或者是类中的方法的时候都需要考虑我们应该传递怎样的参数,或者是是否需要参数。 参数首先分为无参函数有参。无参也就是没有参数,也就不用写了。 有参 func functionTest() { # 小括号内就是用来放参数的 # 函数体内 } Go语言是强数据类型的语言,参数是要指定类型的不然就报错。func 是函数的声明关键字。 func 函数名(参数列表) 返回值类型 {函数体内部} func addTwoNumber(a int, b int) int { return a + b } 我们这里写了一个很简单的函数,把两...阅读全文

博文 2018-10-06 19:34:39 _AlphaBaby_

如何利用golang 反射值来定义一个变量

之前写java的时候就已经知道了有反射这个概念,看过一遍文章专门介绍了一下java的反射机制,不过现在忘记了。 今天写一个通用函数的时候要对传入的参数经行类型判断,还要定义与其像同类型的变量经行取址运算,baidu, google,golang reflect包也看了好久,也没看到将返回值来定义个变量的办法。最后在一篇博客中得到灵感—–>点击可以看看。 这篇文章中没有告诉怎么将反射值去定义一个变量,但看完之后思考一下,既然要返回一个类型,但是类型又是不确定的,若存在这样一个返回变量的函数,则其返回类型必是Interface,在官网文档里找返回类型是Interface的函数,就是它了,它是Value类型的一个函数,所以就不能使用reflect.TypeOf(i interface{})来操作了...阅读全文

博文 2016-03-28 05:00:01 Tangs_

在Go包里添加C代码并且不使用CGO(不需要gcc)

如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译 这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo A 需要注意的: 1. C代码天生的不安全 2. Go1的兼容性保证不包括C代码 3. C函数不能inline 4. 逃逸分析不能跟踪传递到C函数里的value (逃逸分析:http://kenwublog.com/jvm-optimization-escape-analysis) 5. C编译器(5c,6c,8c)没有对应的Go编译器优化做的好,因此生成的代码也许没有Go代码优化的那么好 6. C代码是plan9风格的,与C89较相似 B 返回的方式 第一个例子是一个简单的返回true的函数:True void ·True(bool res) { res...阅读全文

博文 2015-01-13 22:16:22 varding

gorm中的公共方法判断reflect.Value的值是否为空值

``` func isBlank(value reflect.Value) bool { switch value.Kind() { case reflect.String: return value.Len() == 0 case reflect.Bool: return !value.Bool() case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return value.Int() == 0 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr...阅读全文

博文 2017-12-23 10:48:19 fightingforbing

golang编码规范

目录[-]golang编码规范gofmt注释命名控制结构函数(必须)错误处理panicimport缩写参数传递接受者 golang编码规范注:此文档参考官方指南Effective Golang和Golang Code Review Comments进行整理,力图与官方及社区编码风格保持一致。gofmt大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码一致的格式。正常情况下,采用Sublime编写go代码时,插件GoSublilme已经调用gofmt对代码实现了格式化。注释在编码阶段同步写好变量、函数、包注释,注释可以通过godoc导出生成文档。注释必须是完整的句子,以需要注释的内容作为开头,句点作为结尾。程序中每一个被导出的(大写的)名字,都应该有一个文档注...阅读全文

博文 2014-12-24 03:00:02 stephen830

GoLang bufio.NewScanner 详解

上代码 func NewScanner(r io.Reader) *Scanner { return &Scanner{ r: r, split: ScanLines, maxTokenSize: MaxScanTokenSize, } } 函数NewScanner返回一个Scanner,这个返回值来自于函数参数r。他的类型是io.Reader。 type Scanner struct { r io.Reader // The reader provided by the client. split SplitFunc // The function to split the tokens. maxTokenSize int // Maximum size of a token; modif...阅读全文

博文 2019-06-15 15:02:38 我加入简书的路程

golang语言渐入佳境[16]-结构体拷贝

结构体拷贝12345678910111213141516171819202122232425262728type Dog struct { name string color string age int8 kind string}func main() {//1、struct是值类型,默认的复制就是深拷贝 d1 := Dog{"豆豆", "黑色", 2, "二哈"} fmt.Printf("d1: %T , %v , %p \n", d1, d1, &d1) d2 := d1 //值拷贝 fmt.Printf("d2: %T , %v , %p \n", d2, d2, &d2) d2.name = "毛毛" fmt.Println("d2修改后:", d2) fmt.Println("d...阅读全文

博文 2018-12-06 03:35:15 jonson_jackson

golang 内置函数new() 和struct{} 初始化的区别

golang 内置函数new() 和struct{} 初始化的区别happinessaflower·2015-06-17 20:03:41· 13036 次点击 ·预计阅读时间 1 分钟·大约1分钟之前开始浏览这是一个创建于2015-06-17 20:03:41的文章,其中的信息可能已经有所发展或是发生改变。new()这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针。在golang的代码定义如下:funcnew(tType) *Typestrut{}直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的两者对比代码如下:typeStudentstruct{ idintn...阅读全文

博文 2018-06-20 20:34:40 ebayboy

Gin实践 连载五 搭建Blog API's(四)

API's - JSON Web Tokens (JWT) 在前面几节中,我们已经基本的完成了API's的编写 但是,还存在一些非常严重的问题,例如,我们现在的API是可以随意调用的,这显然还不够完美,是有问题的 那么我们采用 jwt-go (GoDoc)的方式来简单解决这个问题 下载依赖包 首先,我们下载jwt-go的依赖包 go get -u github.com/dgrijalva/jwt-go 编写jwt工具包 我们需要编写一个jwt的工具包,我们在pkg下的util目录新建jwt.go,写入文件内容: package util import ( "time" jwt "github.com/dgrijalva/jwt-go" "gin-blog/pkg/setting" ) var...阅读全文

博文 2018-02-17 11:34:38 EDDYCJY

golang中ServeMux解析

ServeMux解析 总览 ServeMux结构体 NewServeMux pathMatch * ServeMux.Handler * ServeMux.handler * ServeMux.Handle * ServeMux.ServeHTTP 总览 本来是想做一个UML出来让这篇解析更清晰一点的,但是markdown的UML语法我一直捣鼓不出来。试了几个软件感觉也没有 想象中的好用和方便,看来是时候自己开发一个了(笑). 口述一个流程,具体的函数大家可以页内跳转去看. 首先我们是通过ListenAndServe来监听本地端口的,之后ListenAndServe将收到的新建一个Response连同收到的Request 作为参数调用ServeMux结构体的ServeHTTP(省略了中间过程...阅读全文

博文 2016-07-10 14:00:02 xinglong

Go并发编程——channel

以前从未接触过并发编程,所以,且写且学吧 引入channel package main import ( "fmt" "sync" "runtime" ) var counter int = 0 func Count(lock *sync.Mutex){ lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main(){ lock := &sync.Mutex{} for i:=0;i<100;i++{ go Count(lock) } for{ lock.Lock() c:=counter lock.Unlock() runtime.Gosched() if c>=100{ break } } } 将counter...阅读全文

博文 2014-10-11 16:00:02 luan_tianjiao

从例子中学习 go 语言 —— 基本语法

go 语言或是 golang 官网上有个 tour。从例子中学习一门语言虽然具有片面性,但是往往是一个入门的好方法;如果一开始就去是看手册的话,有些凌乱,摸不着头脑,有点看字典的味道。所以,先从例子中学习,然后再系统的学习,应该是个不错的方法。 本篇文章基本按照 tour 的步骤,跑跑例子,从例子中去猜测/分析 go 的语法以及结构等,一定程度上可以锻炼一下,观察和分析能力。 hello,world: package main import "fmt" func main() { fmt.Println("hello,world") // 输出 hello,world } 1). package 将程序打包; 2). import 导入其他包,包名用双引号引住;fmt 包 —— 应该是 fo...阅读全文

博文 2014-10-24 11:36:49 陆仁贾

可能被忽略的Golang细节——range

range关键字是Go语言中一个非常有用的迭代array,slice,map, string, channel中元素的内置关键字。 range的使用 range的使用非常简单,对于遍历array,*array,string它返回两个值分别是数据的索引和值,遍历map时返回的两个值分别是key和value,遍历channel时,则只有一个返回数据。各种类型的返回值参考下表: range expression 1st Value 2nd Value(optional) notes array[n]E,*[n]E indexint value E[i] slice[]E indexint value E[i] string abcd indexint rune int 对于string,range...阅读全文

博文 2019-04-26 19:34:43 佛心看世界

[golang]用Go语言写的课表

package main import ( "fmt" "os" ) type tt struct { //定义数据结构 tt,用于存放每日的课程 One string //0 Two string //1 Three string //2 Four string //3 } type DAY struct { //定义数据结构 DAY ,用于存放一周的,英文简写 week string } func main() { //主函数 var weekday int //定义一个int 类型的值,weekday //fmt.Printf("Enter the weekday : ") //fmt.Scanf("%d",&weekday) weekday = getday() //从getday(...阅读全文

博文 2014-10-04 19:27:07 sndnvaps

Go基础系列:数据类型转换(strconv包)

Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。 简单的转换操作 转换数据类型的方式很简单。 valueOfTypeB = typeB(valueOfTypeA) 例如: // 浮点数 a := 5.0 // 转换为int类型 b := int(a) Go允许在底层结构相同的两个类型之间互转。例如: // IT类型的底层是int类型 type IT int // a的类型为IT,底层是int var a IT = 5 // 将a(IT)转换为int,b现在是int类型 b := int(5) // 将b(int)转换为IT,c现在是IT类型 c := IT(b) 但注意: 不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int肯定会失败 低精度转换为高精...阅读全文

博文 2018-11-23 09:10:46 f-ck-need-u

用gomock进行mock测试

在开发过程中往往需要配合单元测试,但是很多时候,单元测试需要依赖一些比较复杂的准备工作,比如需要依赖数据库环境,需要依赖网络环境,单元测试就变成了一件非常麻烦的事情。举例来说,比如我们需要请求一个网页,并将请求回来的数据进行处理。在刚开始的时候,我通常都会先启动一个简单的http服务,然后再运行我的单元测试。可是这个单元测试测起来似乎非常笨重。甚至在持续集成过程中,我还为了能够自动化测试,特意写了一个脚本自动启动相应的服务。事情似乎需要进行一些改变。 mock对象就是为了解决上面的问题而诞生的,mock(模拟)对象能够模拟实际依赖对象的功能,同时又不需要非常复杂的准备工作,你需要做的,仅仅就是定义对象接口,然后实现它,再交给测试对象去使用。 go-mock是专门为go语言开发的mock库,该...阅读全文

博文 2017-06-22 17:05:38 terasum