golang

Go_认识golang

徘徊边缘 提交于 2020-04-04 18:52:08
官方地址:https://golang.org/ 什么是Go?   支持并发、垃圾回收的编译型 系统编程语言 Go语言有哪些特点?   1. 类型安全 和 内存安全   2. 以非常直观和极低代价的方案实现高并发   3. 高效的垃圾回收机制   4. 快速编译   5. 为多核计算机提供性能提升的方案   6. UTF-8编码支持 Go存在价值是什么?   以软件工程为目的的语言设计 Go重要环境变量设置有哪些?    3 个   GOROOT      // go语言解释器所在路径   GOPATH      // go项目的入口目录,也称go工作目录   GOBIN       // go install编译存放路径 推荐使用IDE:   https://www.jetbrains.com/go/,大大减少GO语言环境配置文件,节省大量细枝末节的配置时间 项目目录下需要建立哪些目录?   -- bin    //存放编译后生成的可执行文件   -- src     // 存放编译后生成的包文件   -- pkg    // 存放项目源码 在Go项目中,有哪些需要具备的基础点?   //   在Go中, 用双斜线作为注释   /**/  多行注释,注释 和 html、css一样    关键字:     分支循环  if, else, for, goto, break,

gogland golang 颜色&字体 colors&font 配置文件

梦想与她 提交于 2020-04-04 10:15:36
<scheme name="Ya" version="142" parent_scheme="Darcula"> <option name="FONT_SCALE" value="1.0" /> <metaInfo> <property name="created">2017-08-08T14:59:34</property> <property name="ide">Gogland</property> <property name="ideVersion">1.0.0.0</property> <property name="modified">2017-08-08T14:59:35</property> <property name="originalScheme">My-Darcula</property> </metaInfo> <option name="EDITOR_FONT_SIZE" value="16" /> <option name="CONSOLE_FONT_NAME" value="Consolas" /> <option name="CONSOLE_FONT_SIZE" value="12" /> <option name="EDITOR_FONT_NAME" value="Consolas" /> <colors> <option name=

Golang教程:变量

让人想犯罪 __ 提交于 2020-04-03 04:20:34
声明单一变量 声明一个变量的语法为: var name type ,例如 package main import "fmt" func main() { var age int // variable declaration fmt.Println("my age is", age) } 语句 var age int 声明了一个类型为 int ,名称为 age 的变量。在这里我们没有给它赋任何值。如果一个变量没有被赋予任何值,Go 会自动将这个变量初始化为其类型的 0值,比如这里的 age 将被赋值为 0。运行这个程序,将得到如下输出: my age is 0 一个变量可以被赋予其类型的任何值。例如,在上例中, age 可以被赋予任何整型值: package main import "fmt" func main() { var age int // variable declaration fmt.Println("my age is ", age) age = 29 //assignment fmt.Println("my age is", age) age = 54 //assignment fmt.Println("my new age is", age) } 输出如下: my age is 0 my age is 29 my new age is 54

Golang windows下交叉编译的方法

流过昼夜 提交于 2020-04-02 20:19:33
为啥我也要写golang的交叉编译呢,好多文章都有 但是写的都不明白,搞的我绕了好多弯路 因为他们没写明 用的是cmd还是powershell,我的电脑是win10,用的vscode 默认打开的是 powershell,可是网上写的都是cmd 但是没有写明,我一直都试就是编译不出来,真是气死人 于是就有了这个 cmd: set GOARCH=amd64 set GOOS=linux go build xxx.go    powershell: $env:GOOS="linux" $env:GOARCH="amd64" go build xxx.go    真是日了 来源: https://www.cnblogs.com/wuyaxiansheng/p/12622549.html

mac 下配置protobuf 3.0 golang环境

半城伤御伤魂 提交于 2020-04-01 12:58:28
protobuf 3.0 与 之前的 protobuf 2.6 的语法是不一样的。需要重新安装一下,本机的环境是 OS X Yosemite 10.10.2 1. 不采用home brew安装,用homebrew安装的话会遇到一个open issue https://github.com/Homebrew/homebrew/issues/30320 的问题,没有仔细研究,索性就直接进行手工安装了; 不过这里可以记录一下自定义brew的 formula的方法: (1) 如果直接使用 brew INSTALL protobuf 进行安装的话,目前默认的安装版本还是 2.6.1的,所以需要修改一个brew 的formula,让brew去寻找3.0的版本;方法如下: sudo brew create https://github.com/google/protobuf/archive/v3.0.0-alpha-3.tar.gz 之后会要求输入formula的名字,输入protobuf即可, 如果之前已经安装过protobuf,会报出protobuf.rb已经存在的错误,直接删除那个protobuf.rb文件就可以; 还有如果之前安装了别的版本的protobuf,可以用sudo brew remove protobuf删除; (2) 上述部署做完之后,会弹出一个vim的编辑页面

golang内存模型

旧巷老猫 提交于 2020-03-31 03:21:40
介绍 go内存模型是指在特定的条件下,向goroutine中的变量写入值,在另一个goroutine中能够读取到该变量的值 建议 多个goroute同时修改一个数据必须是有序的 使用channel或sync、sync/atomic包中提供的同步原语,可保证对数据顺序访问 happens before 单个goroutine读写必需按一定顺序执行,编译器和处理器只有在不改变程序执行最终结果的情况下会对单个goroutine的读写重新排序。重新排序会导致一个goroutine看到的行为与另一个goroutine不一致。比如在一个goroutine中执行a=1;b=2,另外的goroutine看到的b值的更新发生在a值更新之前。 golang的内存操作读写请求的happens before:事件e1 happens before 事件e2,则e2在e1后执行。事件e1不是happen before 事件e2且不是在事件e2之后执行,则说事件e1和事件e2是同时执行的。 单个goroutine的happens-before是由程序顺序表达。 以下两条件都满足时一个写操作w向变量v写入数据,读操作r可以观察到变量v的值 1、读操作r没有 happen before 写操作w 2、在写w操作之后与读r操作之前,没有其他的写操作w’’对变量v写入数据 为了保证读操作r读到变量v

Golang 实现 Redis(3): 实现内存数据库

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-29 07:36:18
本文是 golang 实现 redis 系列的第三篇, 主要介绍如何实现内存KV数据库。本文完整源代码在作者Github: HDT3213/godis db.go 是内存数据库的主要源文件,db.Exec 方法会从协议解析器中获得命令参数并调用相应的处理函数进行处理。 目录: Concurrent Hash Map LockMap TTL Concurrent Hash Map KV 内存数据库的核心是并发安全的哈希表,常见的设计有几种: sync.map: golang 官方提供的并发哈希表, 性能优秀但结构复杂不便于扩展 juc.ConcurrentHashMap: java 的并发哈希表采用分段锁实现。在进行扩容时访问哈希表线程都将协助进行 rehash 操作,在 rehash 结束前所有的读写操作都会阻塞。因为缓存数据库中键值对数量巨大且对读写操作响应时间要求较高,使用juc的策略是不合适的。 memcached hashtable: 在后台线程进行 rehash 操作时,主线程会判断要访问的哈希槽是否已被 rehash 从而决定操作 old_hashtable 还是操作 primary_hashtable。 这种策略使主线程和rehash线程之间的竞争限制在哈希槽内,最小化rehash操作对读写操作的影响,这是最理想的实现方式。但由于作者才疏学浅无法使用 golang

go语言周边

旧城冷巷雨未停 提交于 2020-03-27 23:11:28
博主收藏的go语言资料,分享一波~~~ 官网 https://golang.org/ (被墙) 镜像: http://docscn.studygolang.com/ 下载镜像: https://gomirrors.org/ Go Playground: https://play.studygolang.com/ https://play.yeyuqiu.com/ https://play.gopherd.com/ 提示:可以参考 https://github.com/golang/playground 搭建自己的Go Playground。 教程 astaxie/build-web-application-with-golang: A golang ebook intro how to build a web with golang https://github.com/astaxie/build-web-application-with-golang chai2010/advanced-go-programming-book: 《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf插件实现、Web框架实现、分布式系统等高阶主题(完稿) https://github.com/chai2010/advanced-go-programming-book

Golang Channel详解

旧城冷巷雨未停 提交于 2020-03-27 18:07:14
3 月,跳不动了?>>> 感谢参考原文- http://bjbsair.com/2020-03-27/tech-info/7058/ 引言 Goroutine 和 Channel 是 Go 语言并发编程的两大基石。Goroutine 用于执行并发任务,Channel 用于 goroutine 之间的同步、通信。 在Golang的并发哲学里,有一句非常著名的话: Do not communicate by sharing memory; instead, share memory by communicating. 意思是:不要通过共享内存来通信,而要通过通信来实现内存共享,它依赖CSP(Communication Sequence Process) 模型,简称通信顺序进程。 Go提倡使用通信的方法代替共享内存,当一个Goroutine需要和其他Goroutine资源共享时,Channel就会在他们之间架起一座桥梁,并提供确保安全同步的机制。 Channel本质上还是一个队列,遵循FIFO(First In-First Out)原则, 创建通道 创建通道需要用到关键字 make ,格式如下: 通道实例 := make(chan 数据类型) 数据类型:通道内传输的元素类型。 通道实例:通过make创建的通道句柄。 使用通道 通道创建后,就可以使用通道进行发送和接收操作。 写入

Golang 无法下载依赖解决方案 unrecognized import path \"golang.org/x/net

拟墨画扇 提交于 2020-03-26 12:46:06
golang Modules 依赖管理工具使用:https://blog.csdn.net/weixin_40165163/article/details/90112861 Golang 无法下载依赖解决方案 今天本来想写一下爬虫程序的,所以就用到了"github.com/PuerkitoBio/goquery"这个框架,但是在项目中使用golang Modules却无法下载还报了以下错误: go: golang.org/x/net@v0.0.0-20181114220301-adae6a3d119a: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) go: golang.org/x/net@v0.0.0-20180218175443-cbe0f9307d01: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) go: error