golang

golang交叉编译

跟風遠走 提交于 2019-12-01 06:49:25
记录点分享http://gitos.org/2016/04/24/golang-cross-compiler/ 一 环境安装 在苹果系统上安装golang环境非常简单, 用brew直接 brew install go 就可以安装好golang的开发环境. 如果没有安装brew, 则强烈建议安装. 实在不想的, 那么就下着mac版的golang, 在 ~/.bash_profile 上加入 export GOROOT=/your go path export GOPATH=/your develop go path 要交差编译, 必须要有对应平台的golang编译环境, 这里的环境不是指系统环境, 是指编译软件环境. 可以查看$GOROOT/pkg目录, SZCMAC:pkg shizhengchu$ ll total 0 drwxr-xr-x 9 shizhengchu admin 306 4 18 14:22 . drwxr-xr-x 16 shizhengchu admin 544 4 12 08:13 .. drwxr-xr-x 5 shizhengchu admin 170 4 18 14:22 bootstrap drwxr-xr-x 58 shizhengchu admin 1972 4 18 15:32 darwin_amd64 drwxr-xr-x 57

Mac OS X 安装Golang

好久不见. 提交于 2019-12-01 06:40:47
1.确保Mac OS X 安装了Git,Hg,在Mac OS X 10.8+下面安装Xcode CommandLine Tools就可以了,10.9以上安装Xcode就包含了Git工具,hg请安装SourceTree,这个Git GUI工具包含了Mercurial工具 2.下载安装go1.3.1.darwin-amd64-osx10.8.pkg 3.安装Sublime Text,一次安装插件,GoSublime,配置GoSublime-Settings-User文件,切记不要改动任何Default文件,例如:GoSublime-Setting-User写入 { "env": { "GOPATH": "$HOME/Documents/GoPATH/", "GOROOT": "/usr/local/go" } } 4.设置GOPATH 5.设置GOPATH注意事项,在当前用户Home目录下面新建.bash_profile文件 写入 #This is my personal bash_profile,when loaded at login. #===2014-09-04=== #GOPATH export GOPATH=$HOME/Documents/GoPATH #PATH export PATH=$PATH:$GOPATH/bin 然后执行source .bash_profile

golang学习笔记----并发

大城市里の小女人 提交于 2019-12-01 05:28:35
并发模型 并发目前来看比较主流的就三种: 多线程:每个线程一次处理一个请求,线程越多可并发处理的请求数就越多,但是在高并发下,多线程开销会比较大。 协程:无需抢占式的调度,开销小,可以有效的提高线程的并发性,从而避免了线程的缺点的部分 基于异步回调的IO模型: 比如nginx使用的就是epoll模型,通过事件驱动的方式与异步IO回调,使得服务器持续运转,来支撑高并发的请求 golang的goroutine就是为了追求更高效和低开销的并发 goroutine的简介 定义: 在go里面,每一个并发执行的活动成为goroutine。 详解:goroutine可以认为是轻量级的线程,与创建线程相比,创建成本和开销都很小,每个goroutine的堆栈只有几kb(而线程则需1M),并且堆栈可根据程序的需要增长和缩小(线程的堆栈需指明和固定),所以go程序从语言层面支持了高并发。 程序执行的背后:当一个程序启动的时候,只有一个goroutine来调用main函数,称它为主goroutine,新的goroutine通过go语句进行创建。 goroutine的使用 单个goroutine创建:在函数或者方法前面加上关键字go,即创建一个并发运行的新goroutine。 package main import ( "fmt" "time" ) func HelloWorld() { fmt

golang中慎用slice的赋值

随声附和 提交于 2019-11-30 23:27:28
一篇很典型的golang slice采坑记录: https://studygolang.com/articles/6557 有如下代码: type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"` } func main() { jsonStr1 := "{\"age\": 12,\"name\": \"potter\", \"child\":[1,2,3]}" a := AutoGenerated{} json.Unmarshal([]byte(jsonStr1), &a) aa := a.Child fmt.Println(aa) jsonStr2 := "{\"age\": 14,\"name\": \"potter\", \"child\":[3,4,5,7,8,9]}" json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa) } 会发现,第一次打印aa时,aa是 [1,2,3],第二次打印aa时,aa就变成了[3,4,5] 这是因为两次调用 unmarshal 时,a 里面的 Child 字段实际上是同一个 slice,刚开始第一次 unmarshal 时,a.Child = [1

golang学习之路

廉价感情. 提交于 2019-11-30 19:38:06
目录 go语言介绍 开发环境准备 go语言基础 Go语言常用标准库 数据库相关 前端相关 web开发 go语言介绍 为什么要学习go语言 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境(建议使用goland) go语言基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基础之运算符 Go语言基础之流程控制 Go语言基础之数组 Go语言基础之切片 Go语言基础之map Go语言基础之指针 Go语言基础之函数 Go语言基础之结构体 go语言基础之包 go语言基础之接口 Go语言基础之反射 Go语言基础之并发 Go语言基础之网络编程 Go语言基础之单元测试 Go语言基础之文件操作 Go语言常用标准库 go语言标准库之fmt go语言标准库之time go语言标准库之flag go语言标准库之log go语言标准库之strconv go语言标准库之http/template Go语言基础之net/http Go标准库Context 数据库相关 一 数据库初识 二 mysql库表的详细操作 三 行记录的详细操作 四 mysql之单表查询 五 mysql之多表查询 Go语言操作MySQL redis基础 go操作redis 前端相关 前端之html 前端之CSS 前端之JavaScript 前端之jquery web开发 Gin框架介绍及使用

Hyperledger Fabric1.4 安装

試著忘記壹切 提交于 2019-11-30 18:50:38
Hyperledger Fabric 依赖的软件版本查看官方 github 地址 https://github.com/hyperledger/fabric 目录下文件 /docs/source/prereqs.rst,具体版本根据安装的 Fabric 版本不同而不同。 1 安装依赖工具 为了下载方便,最好将 Ubuntu 的软件镜像源更换为国内,点击 “软件和更新” 将镜像源更换为国内,最好是华为或者阿里的源。更换之后,使用如下命令进行更新: $ sudo apt update 1.1 安装 git 安装 git 工具使用如下命令: $ sudo apt install git 1.2 安装 cURL 安装 cURL 使用如下命令: $ sudo apt install curl 1.3 安装 Docker 查看系统是否已经安装 Docker: $ docker --version 未安装,使用如下命令安装最新版本的 Docker: $ sudo apt install docker.io 安装完之后,查看版本,出现如下字样则安装成功: $ docker --version Docker version 18.09.7, build 2d0083d 设置成非 root 用户也能执行 docker,需要将普通用户加入 docker 组: $ sudo usermod -aG

golang http urlencode

和自甴很熟 提交于 2019-11-30 18:47:09
背景: 使用python httpserver搭建了一个关键词提取http服务,使用golang开发的服务,通过http请求访问httpserver。但是发现,httpserver接受到的参数的中文值编码错乱。 包括之前在与前端联调其他服务时,发现前端发送的参数为 # 时,后面的参数会丢失, 或者直接curl调用接口时,url中的参数值带有空格是无法将请求发送到服务的。这些问题都是因为没有对进行urlencode,但是在浏览器中输入接口请求url,不会出现以上问题,因为是将urlencode之后的参数发送到服务的。 以下将简要示例下 golang http中urlencode 示例: 主要是使用 "net/url" 进行编码,其说明文档见: https://godoc.org/net/url 只摘取一部分: url := "http://127.0.0.1/parser?%s" var rq = url.Values{} rq.Add("q", q) resp, _ := http.Get(fmt.Sprintf(url, rq.Encode())) defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) 从以上代码中,使用url的values类型,添加请求参数,

golang 学习笔记 --基本类型

丶灬走出姿态 提交于 2019-11-30 18:06:00
字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为0的序列与一个空字符串对应。字符串的长度即底层字节列中字节的个数。 字符串值是不可变的,对字符串的操作只会返回一个新的字符串,而不会改变原字符串并返回。 只有基本类型及其别名类型才可以作为常量的类型 数组的长度是数组类型的一部分。类型声明中的数组长度不同,即使数组类型的元素类型相同,他们也是不同的类型。 数组:长度不可变 数组零值: 一个不包含任何元素的空数组。 var ipv4 = [...]uint8{192,168,0,1} 切片:长度可变,引用类型,零值的长度与容量都为0 var ips = []string{"192.168.0.1","192.168.0.2"} ips.append("192.168.0.3") ips = make([]string,100) fmt.Println(len(ips)) //100 fmt.Println(cap(ips)) //100 字典:其官方称谓是map,引用类型,零值是nil,零值的长度为0 var ipSwitches = map[string]bool{} ipSwitches["192.168.0.1"]=true delete(ipSwitches,"192.168.0.1") 函数与方法 在go中,函数是一等类型

Golang:线程 和 协程 的区别

做~自己de王妃 提交于 2019-11-30 18:00:57
Golang:线程 和 协程 的区别 目录 前言 协程 协程的特点 第 1 和 第 2 点 特点中的第 3 和 第 4 点 和线程的整体对比 协程 协程,英文名 Coroutine 。但在 Go 语言中,协程的英文名是: gorutine 。它常常被用于进行 多任务 ,即 并发作业 。没错,就是 多线程 作业的那个作业。 虽然在 Go 中,我们不用直接编写线程之类的代码来进行并发,但是 Go 的协程却 依赖于线程 来进行。 协程的特点 这里先直接列出线程的特点,然后从例子中进行解析。 多个协程可由一个或多个线程管理, 协程的调度 发生在其所在的线程中。 可以被调度,调度策略由应用层代码定义,即可被高度自定义实现。 执行效率高。 占用内存少。 上面 第 1 和 第 2 点 我们来看一个例子: func TestGorutine(t *testing.T) { runtime.GOMAXPROCS(1) // 指定最大 P 为 1,从而管理协程最多的线程为 1 个 wg := sync.WaitGroup{} // 控制等待所有协程都执行完再退出程序 wg.Add(2) // 运行一个协程 go func() { fmt.Println(1) fmt.Println(2) fmt.Println(3) wg.Done() }() // 运行第二个协程 go func() { fmt

使用Golang制作一个简单的启动Jar包的桌面程序

纵然是瞬间 提交于 2019-11-30 12:55:32
环境: 1、WindowsXP(不支持xp)以上 2、Golang1.11.X及以上 3、JDK or JRE 第三方库: 1、Windows桌面应用库:WALK (https://github.com/lxn/walk) 2、编码转换库: mahonia (https://github.com/axgle/mahonia) 需要实现的功能 : 1.点击启动按钮运行Jar包并且将控制台输出到桌面程序的文本框中 2.重复启动应该被禁止 3.点击关闭按钮关闭对应当前启动的Java程序 实现细节(对应上面的功能): 1.开个新线程去执行CMD命令,通过javaw.exe运行Jar包: // 执行cmd命令 func execCommand(commandName string, params []string) bool { cmd := exec.Command(commandName, params...) stdout, err := cmd.StdoutPipe() if err != nil { return false } cmd.Start() reader := bufio.NewReader(stdout) for { out, err2 := reader.ReadBytes('\n') if err2 != nil || io.EOF == err2 { break