golang

golang 中的 类型判断

泄露秘密 提交于 2019-12-05 00:44:18
golang 中的 类型判断 类似于javascript中typeof 和 java中 instanceof 比如 var a interface{} newA,ok:=a.(string) 如果ok 是 true 则说明 变量a 是字符串类型,而newA就是string类型的变量,a的实际值 a.(type) 返回的是 a的 类型, 注意他返回的不是一个 字符串表示 string int 这样表示a的类型 a.(type)是和switch 搭配使用的 switch vtype:=v.(type){ case string: xxxxxxxxxxxxxxxxxx case int: xxxxxxxxxxxxxxxx case xxxxxx: xxxxxxxxxxxxx case []interface{}: xxxxxxxx default: xxxxxxxxxxxx } 来源: CSDN 作者: 孙大大 链接: https://blog.csdn.net/suncaishen/article/details/8806655

golang中的reflect包用法

拜拜、爱过 提交于 2019-12-05 00:43:58
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生成输入和输出的相关文档。 介绍 reflect包是golang中很重要的一个包,实现了在运行时允许程序操纵任意类型对象的功能。可以看下 文档 简单了解一下。 在reflect中,最重要的是Value类,只有先获取到一个对象或者变量的Value对象后,我们才可以对这个对象或者变量进行更进一步的分析和处理。我们可以使用 reflect.ValueOf() 方法获取Value对象。 var i int value := reflect.ValueOf(i) // 使用ValueOf()获取到变量的Value对象 type S struct { a string } var s S value2 := reflect.ValueOf(s) // 使用ValueOf()获取到结构体的Value对象 获取到对象或者变量的Value对象后,我们就可以对他们进一步的操作了。 1.获取对象或者变量的类型(Value.Type()和Value.Kind()) Value.Type() 和 Value.Kind() 这两个方法都可以获取对象或者变量的类型,如果是变量的话,使用这两个方法获取到的类型都是一样

golang在http消息交互时的 "[object undefined]"

一个人想着一个人 提交于 2019-12-05 00:43:43
golang在http消息交互时的 “[object undefined]” 在使用 golang 作为微信开发的服务端时,遇到解析消息时字段为空的情况.这种情况下使用 encoding/json 解析会出现 [object Undefined] 字符串,而不是期望的空字符串. 自己写了一个工具函数解析此类情况: func GetHeadString(r *http.Request, key string ) ( string , error) { if len (key) == 0 { return "" , fmt.Errorf( "empty key" ) } x := r.Header.Get(key) if len (x) == 0 || x == "[object Undefined]" { return "" , fmt.Errorf( "empty value for key %s" , key) } return x, nil } 来源: CSDN 作者: robin912 链接: https://blog.csdn.net/robin912/article/details/80981817

Go开发报错 -- Golang strings.Builder type undefined

折月煮酒 提交于 2019-12-05 00:41:31
Go开发报错 -- Golang strings.Builder type undefined 在Go开发中,Go语言版本 go 1.10 以下版本,使用strings.Builder报错 I was having a problem with the strings.Builder type in GO. Attempted to run the example code verbatim and GO still responds with: undefined: strings.Builder Any clues as to what the problem can be, there's been not other problems at all. package main import ( "fmt" "strings" ) func main() { var b strings.Builder for i := 3; i >=1; i-- { fmt.Fprintf(&b, "%x...", i) } b.WriteString("ignition") fmt.Println(b.String()) } 报错: undefined: strings.Builder 原因: # strings.Builder 是 go 1.10 版本才新加入的 , 所以解决方法有两个:

Golang学习之常见错误

╄→гoц情女王★ 提交于 2019-12-05 00:36:57
知行易,知其不行难。首先,在这片文章中指出常见的一些错误,避免你在之后的编程中无所谓的调试工作。 多余的 Imports 命名区分大小写 分号分行 无效的分号 语法和其它问题 多余的 Imports 新建文件,将如下内容拷贝并执行 ErrProg1.go package main import "fmt" import "os" // excessive - we are not using any function in this package func main() { fmt.Println( "Hello world" ) } 输出为: prog.go: 4 : imported and not used: os Go编译器对Go程序非常严格,如果你不使用,就不要有多余的请求。在上面的代码中,试图引入os包,但是在代码当中,并没有使用,Go编译器对这样的行为严厉禁止。去掉第四行代码之后,程序就能正确编译运行。 命名区分大小写 ErrProg2.go package main import "fmt" func main() { fmt. println ( "Hello world" ) } 输出为: prog.go:6 : cannot refer to unexported name fmt.println prog.go:6 : undefined: fmt

Golang 中的“潜规则”

吃可爱长大的小学妹 提交于 2019-12-05 00:36:35
GO语言中要提供给外面访问的方法或是结构体必须是首字母大写 在一个公共的头文件中定义了一个结构体,如下所示: type Header struct { ver int magic_num int len int } 在另一个执行文件中,进行了初始化和赋值: var head comm.Header; head.ver = 1 head.magic_num = 0xffee head.len = 0 编译时报错 ./example_struct2binary.go:21: head.ver undefined (cannot refer to unexported field or method ver) ./example_struct2binary.go:22: head.magic_num undefined (cannot refer to unexported field or method magic_num) ./example_struct2binary.go:23: head.len undefined (cannot refer to unexported field or method len) 后来想起,GO语言中要提供给外面访问的方法或是结构体必须是首字母大写。这个结构体只有结构体名大写了,而里面的字段没有首字母大写

Golang 微服务框架——Micro的使用

久未见 提交于 2019-12-05 00:33:51
一、简单介绍 Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。 二、示例 为了更为直观,先从示例开始。 1、环境搭建(安装依赖) (1)安装protobuf 具体内容参考: https://blog.csdn.net/weixin_42117918/article/details/88920221 (2)安装go-micro go get github.com/micro/go-micro (3)安装micro go get github.com/micro/micro (4)安装consul 由于Micro的服务发现并没有自己实现,仅仅是提供Plugin来接入第三方服务发现(consul, etcd), 默认使用的是consule,因此需要安装consul。(以Windows开发环境为例) 下载consul: https://www.consul.io/downloads.html 在安装的位置解压得到 consul.exe 文件(我的解压位置是:C:\consul) 设置环境变量: 启动: cmd 命令窗口执行: consul agent -dev consul 自带 UI 界面,打开网址: http:/

Golang 系统调用Syscall

邮差的信 提交于 2019-12-05 00:33:33
最近在研究go语言,发现go语言系统调用源码只有调用函数的定义,没有指导文档,网上也没有相关文档的说明,自己稍微研究了一下,不对的地方欢迎指教 go源码中关于系统调用的定义如下: func Syscall(trap, a1, a2, a3 uintptr ) (r1, r2 uintptr , err Errno) func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr ) (r1, r2 uintptr , err Errno) func RawSyscall(trap, a1, a2, a3 uintptr ) (r1, r2 uintptr , err Errno) func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr ) (r1, r2 uintptr , err Errno) 其中Syscall和RawSyscall区别在于Syscall开始和结束,分别调用了 runtime 中的进入系统调用和退出系统调用的函数,说明Syscall函数受调度器控制,不会造成系统堵塞,而RawSyscall函数没有调用runtime,因此可能会造成堵塞,一般我们使用Syscall就可以了,RawSyscall最好用在不会堵塞的情况下。 func Syscall(trap, a1, a2,

golang undefined: strings.ReplaceAll解决

自作多情 提交于 2019-12-05 00:33:18
编译一个开源项目的过程中,报错: undefined: strings.ReplaceAll undefined: os.UserHomeDir 使用如下命令检查golang的版本: go version 显示的结果为: go version go1.11.5 linux/amd64 需要升级golang的版本, 首先下载并安装二进制安装包: wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz tar -C /usr/local -xzf go1.13.1.linux-amd64.tar.gz 最后修改/etc/profile文件加入如下内容: export PATH=$PATH:/usr/local/go/bin 执行: source /etc/profile 再重新编译代码,提示成功 来源: CSDN 作者: vah101 链接: https://blog.csdn.net/vah101/article/details/102615415

Golang使用FastDFS系统

孤街浪徒 提交于 2019-12-05 00:33:03
使用Ubuntu系统部署FastDFS系统,参见: https://www.cnblogs.com/Leo_wl/p/6731647.html 如果编译安装过程中有报错,可用以下办法解决: 下载最新版nginx: wget -c https: //nginx.org/download/nginx-1.12.1.tar.gz 下载最新版fastdfs-nginx-module: wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz 下载最新版 libfastcommon: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz 目前go语言没有发布使用api,可参看: git clone https://github.com/tedcy/fdfs_client 测试程序如下: package main import ( "fdfs_client" "fmt" "sync" ) func TestUpload() { client, err := fdfs_client.NewClientWithConfig("fdfs.conf") defer client.Destory() if err