go开发环境
1.go 下载地址 https: tudygolang.com/dl
根据操作系统 下载相应的安装包
2.设置环境变量
goroot
gopath
path 增加%goroot%\bin
3.开发工具vscode或者idea
vscode下载地址&nbs...[2019/7/15]
Go - 循环Go - 循环
目录
概述
循环 array
循环 slice
循环 map
break
continue
goto
switch
...[2019/7/11]
go:变量和常量
一、标识符和关键字
1、标识符
在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。
...[2019/7/11]
基于Go和Gin的环境配置方法
1.官方下载Go版本,安装相应平台的程序。
2.配置Go的环境变量:
GOROOT:GO安装路径,例如GOROOT = D:\Go
GOPATH: 项目源码所在目录(例如GOPATH = E:\go),该目录下面主要包括三个子目录,分别是src、bin、pkg
GOBIN:bin目...[2019/7/11]
gorm golang 并发连接数据库报错的解决方法
底层报错 error:cannot a ign requested addre
原因
并发场景下 client 频繁请求端口建立tcp连接导致端口被耗尽
解决方案
root执行即可
sysctl -w net.ipv4.tcp_timestamps=1 开启对于TCP时间...[2019/7/11]
golang http连接复用方法
server端
golang httpserver 默认开启keepalive连接复用选项
handler函数需要完整读body数据,构造返回消息,否则当数据不能一次发送完成时,连接复用就会失效。
示例如下
package main
import (
"fmt"...[2019/7/11]
Golang 使用http Client下载文件的实现方法
之前使用beego的http库的时候,有的情况需要下载文件。beego是能实现,但就是有点问题:不支持回调,没法显示下载速度,这在日常开发中是不可忍受的。
看了下beego的实现主要是使用了io.copy函数,于是就深入的看了下实现原理,发现挺简单的,于是就根据io.copy原理实现的一个简单...[2019/7/11]
golang 检查网络状态是否正常的方法
如下所示:
package main
import (
"fmt"
"o exec"
"time"
)
func NetWorkStatus() bool {
cmd := exec.Command("ping", "baidu.com", "-c", "...[2019/7/11]
Go - Map 集合Go - Map 集合
目录
概述
声明 Map
生成 JSON
编辑和删除
推荐阅读
概述
Map 集合是无序的 key-value 数据结构。
Map 集合中的 ke...[2019/7/10]
golang gorm中格式化时间问题详解
前言
最近在开发项目时遇到了发现一个问题,
gorm虽然可以自动帮你维护 created_at、updated_at、deleted_at这些关键时间字段。但是其原理与弊端需要了解一下。
1.使用方法
通过自定义一个localtime的结构,来控制时间的格式
...[2019/7/10]
Go基础编程实践(九)—— 网络编程Go基础编程实践(九)—— 网络编程
下载网页
package main
import (
"io/ioutil"
"net/http"
"fmt"
)
func main() {
url := "http: www.cnblog...[2019/7/9]
go时间/时间戳操作大全(小结)
基本操作
01: 获取当前时间
dateTime := time.Now()
fmt.Println(dateTime)
02: 获取年 月 日 时 分 秒 纳秒
year := time.Now().Year() 年
fmt.Println(ye...[2019/7/9]
GO代码生成代码小思小试
推进需求
GO 项目,可整体生成一个运行文件到处跑,是极爽之事。但如果有资源文件要得带着跑,则破坏了这种体验。
例如下边这个项目结构,resource 目录下为资源文件,main.go 中会通过路径引用到这些资源文件,于是新的需求产生了。
|- hello
----|- resource
-...[2019/7/8]
Go基础编程实践(四)—— 数组和map
数组去重
package main
import "fmt"
func main(){
intSlice := []int{1,5,5,5,5,7,8,6,6, 6}
fmt.Println(intSlice)
uniqueIntSlice := unique(...[2019/7/8]
Go基础编程实践(五)—— 错误和日志
自定义错误类型
Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求。error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型。
error类型定义
type error interface {
Error方法给出了错误描述
...[2019/7/8]
Go基础编程实践(六)—— 文件
检查文件是否存在
在此程序同目录下创建log.txt文件,以检测。
package main
import (
"os"
"fmt"
)
func main() {
if _, err := os.Stat("log.txt"); err == nil {
...[2019/7/8]
一个commit引发的思考一个commit引发的思考
这几天我翻了翻golang的提交记录,发现了一条很有意思的提交:bc593ea,这个提交看似简单,但是引人深思。
commit讲了什么
commit的标题是“sync: document implementation of Once.Do”,显然是对文档做些补充,然而奇怪的是为什么要对某个功能的...[2019/7/8]
Go基础编程实践(七)—— 并发Go基础编程实践(七)—— 并发
同时运行多个函数
观察常规代码和并发代码的输出顺序。
常规代码,顺序执行,依次输出
package main
import (
"fmt"
"time"
)
func main() {
strN := []string{&q...[2019/7/8]
Go基础编程实践(八)—— 系统编程
捕捉信号
运行此程序,控制台将打印"Waiting for signal"
按Ctrl + C 发送信号以关闭程序,将发生中断
随后控制台依次打印"Signal .."、"Exiting..."
package main
i...[2019/7/8]
Go - Struct 结构体
目录
概述
声明结构体
生成 JSON
改变数据
推荐阅读
概述
结构体是将零个或多个任意类型的变量,组合在一起的聚合数据类型,也可以看做是数据的集...[2019/7/5]
MacOS VSCode 安装 GO 插件失败问题解决
0x00 问题重现
Installing golang.org/x/tool cmd/guru FAILED
Installing golang.org/x/tool cmd/gorename FAILED
Installing golang.org/x/lint/golint FAILED
In...[2019/7/5]
Go 程序是怎样跑起来的
目录
引入
编译链接概述
编译过程
词法分析
语法分析
语义分析
中间代码生成
目标代码生成与优化
...[2019/7/3]
Go基础编程实践(三)—— 日期和时间
日期和时间
package main
import (
"fmt"
"time"
)
func main() {
获取当前时间
current := time.Now()
格式化字符串输出
fmt....[2019/7/2]
golang中判断两个slice是否相等
在golang中我们可以轻松地通过==来判断两个数组(array)是否相等,但遗憾的是slice并没有相关的运算符,当需要判断两个slice是否相等时我们只能另寻捷径了。
slice相等的定义
我们选择最常见的需求,也就是当两个slice的类型和长度相同,且相等下标的值也是相等的,比如:
a ...[2019/7/2]
浅论Go语言的美好和丑陋
这是一个“Go不好”系列的额外文章。Go确实有一些不错的特性,也就是本文中“好的”部分,但是当我们不使用API或者网络服务器这是为它设计的而且将它用于业务领域逻辑的时候,总体而言我发现它用起来笨重且糟糕。但是即使在用于网络编程的时候,在设计和实现方面它也有很多缺陷,这导致它在显而易见的简单的表面之下是危险的。[2019/7/1]
Go基础编程实践(二)—— 类型转换Go基础编程实践(二)—— 类型转换
bool to string
strconv包的FormatBool函数用于将bool转为string
package main
import (
"fmt"
"strconv"
)
func main() {
isNew :=...[2019/6/30]
不一样的go语言-玩转语法之二
本文继续玩转语法,是为之二。
I/O(Input/Output),输入输出是计算机最为突出的特点,也可以说是计算机最为核心的功能。没有I/O,计算机就是一堆废铜废铁。从最低层的电子元器件开始,计算机科学家与工程师们,就一直奔跑在追求卓越的I/O性能的道路上。计算机每一次大跨越,就是一次I/O的脱...[2019/6/30]
不一样的go语言-玩转语法之一不一样的go语言-玩转语法之一
这段时间为俗事所累,疲以应付,落下了不少想法,错过了更新的日子。这个专题开始之际,已经准备了不下十几个主题,而在写作的过程中,又有新想法与主题涌现出来。未来预计想写写的内容主要包括:
玩转语法系列
Context的来龙去脉
函数、闭包与范畴论的关系
线程与协程之争
通道的那些事
今天的玩转语...[2019/6/30]
在 Windows 中编译 Github 中的 GO 项目在 Windows 中编译 Github 中的 GO 项目
1、相关软件与环境准备
1.1 GO 安装
下载地址,https: tudygolang.com/dl,选择 Windows 版,本文安装到 D:\Go
1.2 LiteIDE 安装
下载地址,http: liteide.org/cn/download/?可以找到去下载的地方。
本文下载的...[2019/6/30]
Go基础编程实践——字符串
修剪空格
strings包中的TrimSpace函数用于去掉字符串首尾的空格。
package main
import (
"fmt"
"strings"
)
func main() {
helloWorld := "...[2019/6/30]
对Golang import 导入包语法详解
package 的导入语法
写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下:
import(
"fmt"
)
然后在代码里面可以通过如下的方式调用:
fmt.Println( "我爱北京天安门" )
fmt 是 Go 的标...[2019/6/29]
go 下载非标准库包(部份包被墙了)到本地使用的方法
如下所示:
import (
"golang.org/x/net/html"
)
在使用此包时,会导入失败,因为这不是go标准库中,但是由于域名被墙了所以翻墙可以下载此包,放入你的GOPATH路径下的 “golang.org/x/net”这个目录
具体步骤
下载...[2019/6/29]
goLang引入自定义包的方法
看完golang的基本语法后,为了模块化编程,试用了下golang的包管理,结果真踩了几个坑,总结一下吧。
一. 设置$GOPATH环境变量
golang和C或php不一样,不会自动查找当前路径下的文件,必须先在$GOAPTH里添加自己工程的路径;
二. 自定义包里面对外提供的API函...[2019/6/29]
go包管理
摘自:
http: blueskykong.com/2019/02/18/go-dep-1/
https: www.cnblogs.com/apocelipe p/10295096.html#vcs-semver
GOPATH和GOROOT
GOROOT的目的就是告知go当前的安装位置,默认...[2019/6/28]
golang的time包管理
Time对象转换为string和时间戳调用Time对象的方法
转换为string:Time.Format(输出的格式)
转换为时间戳 :Time.Unix()
两者转换为Time对象的时候调用的是time包的方法
string转换:time.Parse("输出格式",st...[2019/6/28]
Go grpc 与 protobuf
现在很多微服务内部的通信协议都采用rpc,性能高,安全。而grpc则是google退出的rpc plus。
protobuf是传输协议,性能高,强大。
来一个server client的通信demo,感受一下这2个的魅力。
首先,我们要约定好接口和数据结构,起名helloworld.p...[2019/6/28]
Go - 变量声明Go - 变量声明
目录
概述
数据类型
常量声明
变量声明
输出方法
推荐阅读
概述
在声明变量之前,咱们先了解下变量的数据类型,这篇文章主要涉及 字...[2019/6/28]
Go - 环境安装
目录
你好,Go语言
环境安装
目录结构
命令
开发工具
学习网址
小结
你好,Go语言
Go 是一个开源的编程语...[2019/6/26]
golang之defer
概述
对于资源释放,有很多不同的实现方式,不同语言也有不同的惯用方法。
C语言 :手动管理
Golang :defer
Python :上下文管理器contexManager
C++ : 作用域和析构函数
Rust :所有权和drop trait
如果了解上面几种语言的童鞋应该...[2019/6/26]
在 Ubuntu 开启 GO 程序编译之旅
本文将使用 putty 连接到一台阿里云 Ubuntu 16.04 服务器,在其上安装 go 语言的编译环境,旨在呈现从安装到“你好,世界!”涉及的方方面面,希望完成这个过程无须觅它处。
1. 安装
方式一使用 apt-get
apt-get install golang-go
执行完成之后,...[2019/6/26]
golang开发:环境篇(六) Go运行监控Supervisord的使用
为什么要使用Supervisord
17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了。到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功夫。总不能跟开发环境一样,直接执行编译生成的二进制文件吧,即使 后台执行了,万一它挂了,没人知道,...[2019/6/24]
golang gRPC(持续更新)
如何开启 gRPC 日志
设置 GRPC_GO_LOG_SEVERITY_LEVEL 环境变量, 可选项:["info", "warning", "error"], 日志将打印到 stderr
还有一个环境变量 GRPC_GO_LOG_V...[2019/6/21]
[Go] golang的用途和windows搭建环境
Golang核心编程:
区块链研发工程师(分布式账本技术,互联网数据库技术,特点是去中心化)
Go服务器端/游戏软件工程师(现在主流是C C++,处理日志,数据打包,文件处理,美团后台流量支撑,处理大并发;游戏后台数据通道)
Golang分布式/云计算软件工程师(盛大云,cdn,京东...[2019/6/18]
谈谈Go语言中的内存重排
目录
什么是内存重排
CPU 重排
编译器重排
为什么要内存重排
内存重排的底层原理
总结
参考资料
...[2019/6/17]
PHP转Go系列:map映射PHP转Go系列:map映射
映射的定义
初识映射会很懵,因为在PHP中没有映射类型的定义。其实没那么复杂,任何复杂的类型在PHP中都可以用数组表示,映射也不例外。
$array['name'] = '平也';
$array['sex'] = '1';
$arr...[2019/6/17]
Go语言交叉编译工具gox
基本介绍
交叉编译是为了在不同平台编译出其他平台的程序,比如在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉编译工具。
配置环境
首先配置好Go语言的环境变量,并在~/.bash_profile中设置,简...[2019/6/14]
PHP转Go系列:数组与切片
数组的定义
用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态。
$array = [1, 'name', ['sex' => '男']];
...[2019/6/13]
Gin上传文件到MongoDB gridfs
目录
上传图片
下载图片
上传图片
func imagePost(c *gin.Context) {
image, err := c.FormFile("file")
...[2019/6/12]
深度解密Go语言之context
目录
什么是 context
为什么有 context
context 底层实现原理
整体概览
接口
Context
canceler
...[2019/6/12]
PHP转Go系列:字符串
字符串的赋值
在PHP中,字符串的赋值虽然只有一行,其实包含了两步,一是声明变量,二是赋值给变量,同一个变量可以任意重新赋值。
$str = 'Hello World!';
$str = 'hia';
Go语言实现上述两步也可以用一行语句解决,就是通过标识var...[2019/6/11]