golang

GoLang中 json、map、struct 之间的相互转化

谁说我不能喝 提交于 2019-11-29 06:48:27
1. golang 中 json 转 struct   <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field)。也就是说结构体的 key 对应的首字母必须为大写。请看下面的例子: package commontest import ( "testing" "encoding/json" ) type Person struct { name string age int } func TestStruct2Json(t *testing.T) { jsonStr := ` { "name":"liangyongxing", "age":12 } ` var person Person json.Unmarshal([]byte(jsonStr), &person) t.Log(person) } 输出的结果如下: 1 { 0}   从结果可以看出,json 数据并没有写入 Person 结构体中。结构体 key 首字母大写的话就可以,修改后: package commontest import ( "testing" "encoding/json" ) type Person struct { Name string Age int } func TestStruct2Json(t *testing.T) { jsonStr := `

golang 12.9 go mod 实践

岁酱吖の 提交于 2019-11-29 06:26:04
1. get start   go mod init >> generate go.mod   export GO111MODULE=on      go run mai.go   goalng 1.11以后 GO111MODULE defalutl set on 2.依赖包会放置在 $GOPATH/pkg/mod 3. goland 使用会发现外部包一片红色,无法找到引用包。   解决方案:settings ---> Go ---> Go modules    来源: https://www.cnblogs.com/waken-captain/p/11459609.html

golang 数据类型之间的转换

杀马特。学长 韩版系。学妹 提交于 2019-11-29 06:25:41
一、基本数据类型之间的转换 1、string到int int,err:=strconv.Atoi(string) 2、string到int64 int64, err := strconv.ParseInt(string, 10, 64) 3、int到string string:=strconv.Itoa(int) 4、int64到string string:=strconv.FormatInt(int64,10) 5、字符串到float32/float64 float32, err = ParseFloat(string, 32) float64,err = ParseFloat(string,64) 6、int64转int int:=int(int64) 7、int转int64 int64:=int64(int) 二、interface{}与其他类型之间的转换 转换方式包括隐式转换与断言转换。 1、interface{}类型转换成具体类型:interfaceVar.(具体类型) 原理:断言实现。如: 断言成功返回true,失败返回false value, ok := a.(string) if !ok { fmt.Println("It's not ok for type string") return } fmt.Println("The value is ", value)

golang读写文件的几种方式

杀马特。学长 韩版系。学妹 提交于 2019-11-29 02:39:21
golang中处理文件有很多种方式,下面我们来看看。 (1)使用os模块 先来看看如何查看文件属性 package main import ( "fmt" "os" ) func main() { //打开文件使用os.Open函数,会返回一个文件句柄和一个error file, err := os.Open(`D:\komeijisatori\src\day3\whiteblum.txt`) if err != nil { fmt.Println("文件打开失败:",err) } //调用file.Stat()可以查看文件的信息,这是一个os.FileInfo对象 info, err := file.Stat() //属性如下 /* type FileInfo interface { Name() string // 文件名 Size() int64 // 文件的大小,按字节计算 Mode() FileMode // 文件的模式 ModTime() time.Time // 修改时间 IsDir() bool // 是否是目录 Sys() interface{} // 数据源,一般不用管 } */ fmt.Println(info.Name()) // whiteblum.txt fmt.Println(info.Size()) // 183 //有点类似于linux里面的

Golang新开发者要注意的陷阱和常见错误

天大地大妈咪最大 提交于 2019-11-29 02:36:07
转自:http://colobu.com/2015/09/07/gotchas-and-common-mistakes-in-go-golang/ 目录 [−] 初级 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variable Shadowing 不使用显式类型,无法使用“nil”来初始化变量 使用“nil” Slices and Maps Map的容量 字符串不会为nil Array函数的参数 在Slice和Array使用“range”语句时的出现的不希望得到的值 Slices和Arrays是一维的 访问不存在的Map Keys Strings无法修改 String和Byte Slice之间的转换 String和索引操作 字符串不总是UTF8文本 字符串的长度 在多行的Slice、Array和Map语句中遗漏逗号 log.Fatal和log.Panic不仅仅是Log 内建的数据结构操作不是同步的 String在“range”语句中的迭代值 对Map使用“for range”语句迭代 "switch"声明中的失效行为 自增和自减 按位NOT操作 操作优先级的差异 未导出的结构体不会被编码 有活动的Goroutines下的应用退出 向无缓存的Channel发送消息

go mod 踩坑笔记

好久不见. 提交于 2019-11-29 01:55:31
golang有很多非官方的包管理工具像govendor,gvt,dep等。go mod是官方在1.11版后推出的golang包管理工具。目前可用,但坑较多,, 1.包路径中含有大写字母时导致go mod tidy,go mod download等命令无法使用。 解决方法: go.mod中添加replace 以"github.com/Unknwon/com"包为例: replace github.com/Unknwon/com => github.com/unknwon/com v0.0.0-20190804042917-757f69c95f3e 来源: https://www.cnblogs.com/reboot777/p/11438753.html

Knative Serving 进阶: Knative Serving SDK 开发实践

流过昼夜 提交于 2019-11-29 00:17:49
![](https://yqfile.alicdn.com/08c5e5f6463ffd85d150edb4cdfef29803ddbafe.png) 作者 | 阿里云智能事业群技术专家 牛秋霖(冬岛) > **导读**:通过前面的一系列文章你已经知道如何基于 kubectl 来操作 Knative 的各种资源。但是如果想要在项目中集成 Knative 仅仅使用 kubectl 这种命令的方式是不够的,还需要在代码中基于 Knative Serving SDK 进行集成开发。本篇文章中,阿里云智能事业群技术专家冬岛将从 Knative Serving SDK 入手,介绍如何基于 Knative SDK 进行 serverless 开发。 []() ## [](https://yuque.antfin-inc.com/knative/aipafv/ytyzz2#2dc1354b)Golang Context 在正式开始介绍 Knative Serving SDK 之前,我们先简单介绍一下 Golang Context 的机理。因为在 Knative Serving 中 client、Informer 的初始化和信息传递完全是基于 Golang Context 实现的。 Golang 是从 1.7 版本开始引入的 Context ,Golang 的 Context 可以很好的简化多个

golang remote debug和docker debug

给你一囗甜甜゛ 提交于 2019-11-29 00:15:53
在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf 来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本地调试代码一样在 Goland 中调试 Go 代码,很是惬意。如果要说缺点的话,那就是在服务端启动 delve 的 server 端之后,必须在一定时间内(不知道具体多久)连接上它,不然会关闭;同时,在我断开调试之后,server 会自动关闭,如果我要再次调试,那就必须再运行一次 server(当然,可以通过不关闭 debug 解决,就是不太友好)。 具体使用 delve 调试还是比较简单的,只需要两步: 第一步:在服务器上运行 delve 服务器 运行 delve 服务器有几种形式,可以是用 delve 运行 Go 代码,也可以是运行可执行程序,也可以是侵入一个运行中的 Go 程序,一般来说,attach 一个运行中的 Go 程序比较常见: [root@liqiang.io] dlv attach $PID --headless --api-version=2 --log --listen=:1234 这样 delve 服务器就起来了,然后继续下一步就是 Goland 连接调试。 第二步:在 Goland 中连接 delve 服务器 直接在 Goland 中配置 Host 和

解决vscode中golang插件依赖安装失败问题

◇◆丶佛笑我妖孽 提交于 2019-11-29 00:00:14
vscode中安装ms-vscode.go插件后可以开启对go语言的支持,ms-vscode.go插件需要依赖一些工具,安装完成后提示 gocode go-outline go-symbols guru gorename gocode-gomod goreturns golint Installing github.com/ramya-rao-a/go-outline FAILED 由于网络原因,一些依赖工具无法正常安装,需要进行手动安装. 以下为手动安装的工具的步骤: 在%GOPATH%\src\目录下,建立路径 golang.org\x 进入到 %GOPATH%\src\golang.org\x ,下载需要工具的源码 git clone https://github.com/golang/tools.git tools clone完成后,会生成一个tools文件夹,这样工具所需要的源码已经准备好了 进入到%GOPATH%下,执行 go install github.com/ramya-rao-a/go-outline go install github.com/acroca/go-symbols go install golang.org/x/tools/cmd/guru go install golang.org/x/tools/cmd/gorename go install