《The.Go.Programming.Language.2015.11》之 reflect

判断reflectValue类型并提取数据 addressable 获取结构体方法的名称 判断reflect.Value类型并提取数据 对于reflect.Value类型数据,根据Kind()进行判断 func formatAtom(v reflect.Value) string { switch v.Kind() { case reflect.Invalid: return "invalid" case reflect.Int, reflect.Int16, reflect.Int32, re...阅读全文

CSDN博客 2016-09-18 11:00 KingEasternSun

go 类型转换

golang是强类型语言,在应用过程中类型转换基本都会用到。下面整理一下常用的类型转换,会持续更新。 整形转字符串 fmt.Println(strconv.Itoa(100)) 该方法的源码是: // Itoa is shorthand for FormatInt(i, 10). func Itoa(i int) string { return FormatInt(int64(i), 10) } 可以看出是FormatInt方法的简单实现。 字符串转整形 i, _ := strconv.Atoi...阅读全文

CSDN博客 2016-09-18 11:48 hou512504317

go语言方法Value Receiver, Pointer Receiver各种不同情况的实验笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! for range 问题 http://stackoverflow.com/questions/30577212/go-for-range-slice-and-goroutine-method-invocation-the-logic-behind package main import ( "fmt" "time" ) type field struct { name string } func (p *field) print(...阅读全文

CSDN博客 2016-08-16 09:40 htyu_0203_39

golang的服务控制实践

对于程序及服务的控制,本质上而言就是正确的启动,并可控的停止或退出。在go语言中,其实就是程序安全退出、服务控制两个方面。核心在于系统信号获取、Go Concurrency Patterns、以及基本的代码封装。 程序安全退出 执行代码非安全写法 在代码部署后,我们可能因为服务配置发生变化或其他各种原因,需要将服务停止或者重启。通常就是for循环阻塞,运行代码,然后通过control+C或者kill来强制退出。代码如下: //file svc1.go package main import ( ...阅读全文

CSDN博客 2016-08-22 11:38 qq_26981997

golang 赋值操作符 := = ==

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

CSDN博客 2016-07-05 15:57 lsm135

Go语言AST尝试

# Go语言AST尝试 Go语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorename, guru等工具. 作为工具它们都是使用go语言([查看](https://github.com/golang/tools/tree/master/cmd))开发的, 这些工具都有一个共同点就是: 读取源代码, 分析源代码, 修改或生成新代码. ## 简述 很多编程语言/...阅读全文

开源中国博客 2016/09/17 18:56 qgymje

Go语言AST尝试

Go语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorename, guru等工具. 作为工具它们都是使用go语言(查看)开发的, 这些工具都有一个共同点就是: 读取源代码, 分析源代码, 修改或生成新代码. 简述 很多编程语言/库/框架等都能生成代码, 比如使用rails, 可以轻松地new一个project出来, 生成项目基本代码, 我们称其为boiler...阅读全文

博客园 2016-09-17 18:42 qgymje

golang官方学习文档

最近发现好多学习golang的同学不知道怎么开始学习,其实直接去官方看例子就OK,官方讲解的非常详细 官方中文在线文档 https://tour.go-zh.org/welcome/1 支持语言列表见 https://tour.golang.org/welcome/2 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $nu...阅读全文

CSDN博客 2016-09-05 11:36 hai046

golang coding [3]

golang web 一个简单的web Demo. 可参考 Writing Web Applications 项目目录结构 main.go // web project main.go package main import ( "log" "net/http" "text/template" ) type WebData struct { Name string } var name string func rootHandler(w http.ResponseWriter, r *http....阅读全文

博客园 2016-09-17 17:57 7explore-share

go 使用protobuffer proto3

1、获取 Protobuf 编译器 protoc,跟C++通用的;可以在git下载到二进制文件 2、获取 goprotobuf 提供的 Protobuf 编译器插件 protoc-gen-go go get github.com/golang/protobuf/protoc-gen-go 将protoc-gen-go二进制执行程序所在的目录加入到环境变量,或者直接将二进制文件拷贝到 protoc 所在的目录 3.获取 goprotobuf 提供的支持库,包含诸如编码(marshaling)、解码...阅读全文

CSDN博客 2016-09-08 16:31 sdsabc2000

Golang开发中遇到的一些问题。

1. 结构体中的属性的首字母大小写问题。 出现场景:MongoDB的golang驱动:mgo的数据存储,小写的字段不能存储 原因:golang的小写代表是私有函数或者私有属性。 2.函数的参数的 指针变量 和 非指针变量问题。 出现场景:beego的controller的TplName 指定无效。 原因:非指针参数的复制。阅读全文

CSDN博客 2016-09-17 17:26 ribavnu

eclipse下集成golang插件

百度谷歌必应了好多,发现路径全部404,好容易拼凑成功,分享一下。 百度云盘分享的golang插件的一些jar包:http://pan.baidu.com/s/1cgfMnc windows64位下golang的jdk:http://pan.baidu.com/s/1dENcNQD 解压之后看到目录如下: 分别把features和plugins文件夹下的jar文件拷贝到eclipse下对应的features和plugins文件夹下。然后重启eclipse。接下来配置golang的开发环境。 安装...阅读全文

CSDN博客 2016-09-13 15:34 sinat_28545681

GO-log日志封装

Go封装日志: 支持归档输出,一个小时压缩归档一份 最多保留三天的日志 支持日志级别自定义 如果没有指定输出文件默认输出到控制台。 支持输出文件名行号,以及时间、日志界别 如: info 10:08:40.826836 handler.go:81 package logger import ( "fmt" "log" "os" "os/exec" "strings" "time" ) const ( PanicLevel int = iota FatalLevel ErrorLevel Warn...阅读全文

CSDN博客 2016-08-12 15:23 gdutliuyun827

Go语言学习笔记11

6.程序测试和文档 6.1程序测试 3.样本测试 测试源码文件中还可以添加样本测试函数,但编写样本测试函数不需要使用 testing 代码包的 API。 (1).编写样本测试函数 样本测试函数的名称需要以“Example”作为开始。在这类函数的函数体的最后还可以有若干个注释行。它们作用是比较在该测试函数被执行期间,标准输出上出现的内容是否与预期的相符。但要想这些注释航被正确地解析,需满足下面几个条件: 这些注释行必须出现在函数体的末尾,且在它们和作为当前函数体结束符的“}”之间没有任何代码。否则...阅读全文

CSDN博客 2016-07-17 09:07 u012855229

P2P GO Client角色的协商

1 P2P GO Client协商流程  协商流程 P2P GO/Client的协商流程只需要简单的几步,如下图: P2P连接发起端:指在P2P连接过程中主动发起P2P连接的机子,用A表示; P2P连接接受端:指在P2P连接过程中接受P2P连接的机子,用B表示; 图1 P2P GO/Client协商流程 如上图所示: 1、 首先A在P2P连接初始化准备完成后,发送一个“GO Negotiation Request”给B; 2、 而这时候,B并没有准备好,这时B先保存下A的协商信息,然后发送一个...阅读全文

CSDN博客 2016-07-18 19:50 zjli321

golang开发环境(2016.9.16)

一.windows下安装 1.下载go1.6.3.windows-amd64.msi,建议默认安装到‘C:\Go\’ (最新版本1.7.1不支持IDEA调试) 2.环境变量 变量 值 说明 GOROOT C:\Go\ 安装程序默认会设置,如果用zip方式安装则手动设置 Path C:\Go\bin 安装程序默认会设置,如果用zip方式安装则手动设置 GOPATH d:\goproject 需要自己设置 3.文件夹d:\goproject下面建3个子文件夹:src, pkg, bin 4.命令行下...阅读全文

博客园 2016-09-17 09:24 wjx0912

Go实现线程池

本文通过代码讲解如何实现一个线程池。代码及注释如下: 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 33 34 35 36 37 package main import "fmt" import "time" //这个是工作线程,处理具体的业务逻辑,将jobs中的任务取出,处理后将处理结果放置在results中。 func worker(id int, jobs <-c...阅读全文

CSDN博客 2016-09-17 08:33 kc87654321

从nsq中学习如何优雅的退出go 网络程序

退出运行中的程序,可以粗暴的kill -9 $PID,但这样会破坏业务的完整性,有可能一个正在在执行的逻辑半途而费,从而产生不正常的垃圾数据。 本文总结在go语言中,如何能优雅的退出网络应用,涉及的知识包括:signal,channel,WaitGroup等。 从这里:https://gobyexample.com/channel-synchronization 可以简单了解到,在go中如何使用channel实现goroutines同步。 在nsq中,也使用了相同的机制,不过封装更复杂了些。我们...阅读全文

CSDN博客 2016-09-17 08:21 kc87654321

Go原子计数

发表回复 通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步。 先看代码: 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 33 34 package main import "fmt" import "time" import "sync/atomic" import "runtime" func main() { // 定义一个整数 var o...阅读全文

CSDN博客 2016-09-17 08:25 kc87654321