go语言

Go语言框架db-GORM

爷,独闯天下 提交于 2020-02-09 03:30:12
本文是 李文周的博客 go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接: https://www.liwenzhou.com/posts/Go/go_menu/ gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 GORM总结 安装 go get -u github.com/jinzhu/gorm 连接数据库 连接不同的数据库都需要导入对应数据的驱动程序, GORM 已经贴心的为我们包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动即可: import _ "github.com/jinzhu/gorm/dialects/mysql" // import _ "github.com/jinzhu/gorm/dialects/postgres" // import _ "github.com/jinzhu/gorm/dialects/sqlite" // import _ "github.com/jinzhu/gorm/dialects/mssql" 连接MySQL import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) func main ( ) { db , err := gorm . Open ( "mysql" ,

VS Code配置Go语言开发环境

我只是一个虾纸丫 提交于 2020-02-08 22:48:49
VS Code是微软开源的一款编辑器,插件系统十分的丰富。本文就介绍了如何使用VS Code搭建Go语言开发环境。 VS Code配置Go语言开发环境 说在前面的话,Go语言是采用UTF8编码的,理论上使用任何文本编辑器都能做Go语言开发。大家可以根据自己的喜好自行选择。编辑器/IDE没有最好只有最适合。 下载与安装 VS Code 官方下载地址: https://code.visualstudio.com/Download 三大主流平台都支持,请根据自己的电脑平台选择对应的安装包。 双击下载好的安装文件,双击安装即可。 安装中文简体插件 点击左侧菜单栏最后一项 管理扩展 ,在 搜索框 中输入 chinese ,选中结果列表第一项,点击 install 安装。 安装完毕后右下角会提示 重启VS Code ,重启之后你的VS Code就显示中文啦! VSCode 主界面介绍: 安装Go开发扩展 现在我们要为我们的VS Code编辑器安装 Go 扩展插件,让它支持Go语言开发。 变更编辑器主题 依次点击 首选项->颜色主题 会弹出如下窗口: 推荐类似Sublime Text风格的主题 Monokai ,和明亮风格的主题 Light(Visual Studio) 。 接下来的演示示例就是在 Light(Visual Studio) 主题下截图。 安装Go语言开发工具包

go语言编译为可执行文件

情到浓时终转凉″ 提交于 2020-02-08 10:31:02
安装go后,我们一般会设置好GOROOT和GOPATH环境变量 在windows下,打开cmd,执行go env 命令查看环境变量 注意到: GOROOT,GOPATH的路径,专门看GOOS : 如果:GOOS=windows说明我们生成windows的可执行文件,如果是GOOS=linux则是生成linux的可执行文件。 我们可以通过set命令来更改生成平台的的可执行文件: set GOOS=windows 确定生成平台的可执行文件后,切换到src目录下,执行go install 命令生成可执行文件: 在src目录下我们有一个ServerGo项目文件夹。 例如 go install ServerGo, 没有报错的话,在GOPATH目录下生成bin和pkg目录,在bin目录下生成可执行文件,exe。 来源: CSDN 作者: 阿朵彬 链接: https://blog.csdn.net/panjunnn/article/details/104038547

Go语言的一些使用心得

强颜欢笑 提交于 2020-02-08 04:22:02
序 起初一直使用的Python,到了18年下半年由于业务需求而接触了Golang,从开始学习到现在的快半年里,也用Golang写了些代码,公司产品和业余写的都有,今天就写点Golang相关的总结或者感想吧。 PS:运维人员学习一两门开发语言是很重要切明智的,不会开发的运维我认为会逐渐被淘汰的,转型是迟早的事情。 语法简单 GO是崇尚极简主义的,提倡少即是多,GO的特性很少,内部关键字也不多,基础的话一天就可以学完,同时它的语法极为简单,很容易看懂。 部署方便 GO是一个强类型静态语言(最初不习惯),直接把代码编程成可执行文件,不依赖系统环境,完全可以做到轻松的发布。而且还可以交叉编译。这点我很喜欢。 标准库 GO自身带的标准库现在已经很全面的了,目前从文件归档、压缩、数据库到数据序列化,字符格式化、校验、网络、同步、系统、加密、编码、图形等各个方面应有尽有。在标准库上可以完成几乎大部分的需求。重要的是,这些标准库的质量都非常高,都很健壮。接口也较为简单,有清晰的文档说明。同时随着这两年的发展,GO的第三方库也多了起来,虽然可能没有像python那么多,但是较其发展时间来说,还是非常不错的。 集成测试框架 写单元测试不是个容易的工作。需要一些技巧和努力才可以做起来。但是在GO中集成了单元测试框架,只要源码文件以_test.go结尾,就可以直接通过go test执行单元测试

《go语言从入门到进阶实战》_徐波

痞子三分冷 提交于 2020-02-08 02:02:57
摘录 Go语言是Google公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。 Go语言不使用虚拟机,只有运行时(runtime)提供垃圾回收和goroutine调度等。 Go语言使用自己的链接器,不依赖任何系统提供的编译器、链接器。因此编译出的可执行文件可以直接运行在几乎所有的操作系统和环境中。 从Go 1.5版本之后,Go语言实现自举,实现了使用Go语言编写Go语言编译器及所有工具链的功能。 Go语言可以利用自己的特性实现并发编译,并发编译的最小元素是包。从Go 1.9版本开始,最小并发编译元素缩小到函数,整体编译速度提高了20%。 Go语言的并发是基于goroutine,goroutine类似于线程,但并非线程。可以将goroutine理解为一种虚拟线程。Go语言运行时会参与调度goroutine,并将goroutine合理地分配到每个CPU中,最大限度地使用CPU性能。 在Go语言中,自增操作符不再是一个操作符,而是一个语句。因此,在Go语言中自增只有一种写法: i++ 如果写成前置自增“++i”,或者赋值后自增“a=i++”都将导致编译错误。 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错。 布尔型无法参与数值运算,也无法与其他类型进行转换。 切片发生越界时,运行时会报出宕机,并打出堆栈

Go语言之socket编程

拥有回忆 提交于 2020-02-08 00:56:05
socket编程 服务端的处理流程 a. 监听端口(为什么一般没有,因为默认是80,隐藏了) b. 接收客户端的链接 c. 创建goroutine,处理该链接 客户端的处理流程 a. 建立与服务端的链接 b. 进行数据收发 c. 关闭链接 网络协议 TCP/IP协议 一般默认为4层即可:链路层、网络层、传输层、应用层 链路层:处理MAC地址,设备到设备 网络层:处理IP地址,主机到主机 传输层:处理数据传输,进程到进程 应用层:处理应用,应用程序 层和协议 每一层自己的协议 链路层 ARP:设备到设备(网卡、MAC),通过ip找mac 网络层 ping 172.0.0.1 传输层 TCP:文件传输、安全、慢 UPD:例如聊天相关、不安全、快 复习知识 网卡:网卡就是标识,网卡地址—>物理地址(MAC),广播时为了避免广播风暴,根据ip,仅在当前局域网内寻找目的mac地址 打包解包 C/S模型 客户机-服务机模型 服务端例子 package main import ( "fmt" "net" ) func main ( ) { // 监听 listener , err := net . Listen ( "tcp" , "192.0.0.1:8000" ) if err != nil { fmt . Println ( "err:" , err ) } defer listener

Go语言极速入门手册

本小妞迷上赌 提交于 2020-02-07 23:55:23
Github: https://github.com/coderzh/CodeTips /* gotips_test.go: Golang速学速查速用代码手册 Source: github.com/coderzh/CodeTips/blob/master/gotips_test.go Author: coderzh(github.com/coderzh) Blog: http://blog.coderzh.com 参考:《Go语言编程》 */ package main import ( "errors" "fmt" "github.com/stretchr/testify/assert" "io" "io/ioutil" "log" "math" "os" "path/filepath" "regexp" "strings" "sync" "testing" "time" ) // 0. 注释 /* 规范: 1. 命名:骆驼命名法(不要用下划线) 命令: go get github.com/coderzh/xxx go build calc go run xxx.go go install calc */ // 1. Hello World func helloWorld() { fmt.Println("Hello, 世界") } // 2.变量类型 func typeDemo(

Go语言极速入门手册.go

五迷三道 提交于 2020-02-07 23:52:23
Github: https://github.com/coderzh/CodeTips /* gotips_test.go: Golang速学速查速用代码手册 Source: github.com/coderzh/CodeTips/blob/master/gotips_test.go Author: coderzh(github.com/coderzh) Blog: http://blog.coderzh.com 参考:《Go语言编程》 */ package main import ( "errors" "fmt" "github.com/stretchr/testify/assert" "io" "io/ioutil" "log" "math" "os" "path/filepath" "regexp" "strings" "sync" "testing" "time" ) // 0. 注释 /* 规范: 1. 命名:骆驼命名法(不要用下划线) 命令: go get github.com/coderzh/xxx go build calc go run xxx.go go install calc */ // 1. Hello World func helloWorld() { fmt.Println("Hello, 世界") } // 2.变量类型 func typeDemo(

Go语言通道讲解

青春壹個敷衍的年華 提交于 2020-02-07 05:47:21
一、浅谈通道 如果说 goroutine 是 Go语言程序的并发体的话,那么 channels 就是它们之间的通信机制。一个 channels 是一个通信机制,它可以让一个 goroutine 通过它给另一个 goroutine 发送值信息。每个 channel 都有一个特殊的类型,也就是 channels 可发送数据的类型。一个可以发送 int 类型数据的 channel 一般写为 chan int。 Go语言提倡使用通信的方法代替共享内存,当一个资源需要在 goroutine 之间共享时,通道在 goroutine 之间架起了一个管道,并提供了确保同步交换数据的机制。声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。 这里通信的方法就是使用通道(channel),如下图 图:goroutine 与 channel 的通信 在地铁站、食堂、洗手间等公共场所人很多的情况下,大家养成了排队的习惯,目的也是避免拥挤、插队导致的低效的资源使用和交换过程。代码与数据也是如此,多个 goroutine 为了争抢数据,势必造成执行的低效率,使用队列的方式是最高效的,channel 就是一种队列一样的结构。 二、通道的特性 通道类型是Go自带的,相当于是一个先进先出的队列,同时唯一一个可以满足并发安全性的类型

11.Go语言基础之接口

…衆ロ難τιáo~ 提交于 2020-02-06 16:46:31
接口定义了一个对象的行为规范,接口只定义规范不实现,由具体的对象来实现规范的细节。 1.1接口类型 在Go语言中,接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,是duck-type programming的一种体现。 接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,就是洗衣机。不关心属性(数据),只关心行为(方法)。 在Java中,也是有接口的概念的。 1.2为什么要使用接口 package main import "fmt" type Cat struct {} func (c Cat) say() string { return "喵喵喵" } type Dog struct {} func (d Dog) say() string { return "汪汪汪" } func main() { var c Cat fmt.Println("猫:",c.say()) var d Dog fmt.Println("狗:",d.say()) } 结果: 猫: 喵喵喵 狗: 汪汪汪 Process finished with exit code 0 上面的代码中定义了猫和狗,都会叫,你会发现main函数中有明显的代码重复,如果动物越多,那么say()函数会越多,那怎样优化呢? 可以使用接口! 1