Golang笔记集】的更多相关文章

学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go的学习之路 https://github.com/talk-go/read 知识图谱: https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0#map Golang中文网: https://studygolang.com/pkgdoc…
golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这导入其他包 导入包之后,是构成源文件的变量.函数.类型生命等 go语言不需要在语句后家分号 import时,左括号'('要跟import在一行 函数的的左花括号'{' 必须跟func关键词在一行 下面这段代码是一个完整的GO程序 package main import( "fmt" ) f…
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不同的是Golang的struct可以定义自己的函数,这使得struct有了一些class的特点,所以Golang具有OOP里抽象和封装的概念.举个栗子来说,f是os.OpenFile()函数返回的File类型指针,File结构体实现了Close()函数,通过f.Close()调用File结构体里的C…
Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是简洁(语言细节少).高效(开发迅速)和高性能(忽略GC时,类比C++的性能). package package是golang最基本的分发单位.每个golang源代码文件开头都要申明其属于哪个package.如果输出的是可执行文件,则必须定义一个'main' package和属于它的一个main()函…
<Platform-native GUI library for Go> 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X 10.7以上) <Gopm 快速入门> 介绍:Gopm(Go 包管理工具) 是一个用于搜索.安装.更新和分享 Go 包的管理工具. <go build 命令是如何工作的?> 介绍:本文以 Go 的标准库为例,介绍了 Go 编译过程的工作原理. <Go 语言的国际化支持(资源文件…
1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 https://golang.org/ ,对应的中文版网站是 https://go-zh.org/ ,对中国开发者还是很友好啊. go语言圣经: https://docs.ruanjiadeng.com/gopl-zh/ 2.环境配置  go 语言相比其它语言,初次安装配置要麻烦一点,需要手动配置环境…
一.kafka集群搭建 至于kafka是什么我都不多做介绍了,网上写的已经非常详尽了. 1. 下载zookeeper  https://zookeeper.apache.org/releases.html 2. 下载kafka http://kafka.apache.org/downloads 3. 启动zookeeper集群(我的示例是3台机器,后面的kafka也一样,这里就以1台代指3台,当然你也可以只开1台) 1)配置zookeeper. 修改复制一份 zookeeper-3.4.13/c…
背景 感觉redis-cli desktop及其难用,最近用golang做了个redis查询工具,支持单例和集群操作,终于不再卡顿!!! 用到的包 "github.com/garyburd/redigo/redis” - 单例 "github.com/chasex/redis-go-cluster" - 集群,基于redgo做的 (https://github.com/chasex/redis-go-cluster) 效果图…
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.go package main import "fmt" func main() { fmt.Print("hello word! \n") } 逐行解读 1. package main :定义一个包,包名为main,main是可执行的程序的包名,所有的源文件头部必须有一…
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly language 如果为函数的每一个返回值都设置变量名,则会以相应的零值初始化,且在该函数的return语句中省略操作数,这种用法称之为 bare return. go中的错误处理,习惯上是先进行一系列的初始化检查,将处理失败逻辑的代码先行处理,然后才是函数的实际逻辑,这样使得代码更简洁,避免过多的层级结构…
1.定义一个结构体 type User struct { userid int username string password string } 2.初始化一个结构体 有两种情况,一是得到结构体的对象,一是得到结构的对象指针,分别有三种方式: //第1种方式,先声明对象,再初始化 var player1 Player player1.userid = player1.username = "lina1" player1.password = " //第2种方式,声明同时初始…
可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目前 golang 唯一的IDE了吧,是使用 qt 开发的,界面比较简陋. 下载地址:https://sourceforge.net/projects/liteide/ 功能上还算是比较完善,自动格式化代码.编译.调试都不错. 可以通过 go_code 为 LiteIDE 增加智能提示.先下载 go_…
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 import "logging" 则会在所有设置的 $GOPATH/src 下去寻找相应包,而不仅仅是当前项目中. 2.包声明 在每一个代码文件中,都需要使用 package 命令来声明包名,所以在GO语言中,代码文件属于哪个包与文件目录结构没有必然联系,但习惯上我们会设置成跟目录结构相…
加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 3第一次加入集群使用consul join ip地址 4 挂掉后重启 要使用consul ...... rejoin 加入. 即在启动命令后加 rejoin. (建议使用 这几个选项,否则可能出现没等挂掉的机器加入集群,就被集群认定该node已死,而可能导致的通信问题 -retry-join=1.2…
ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization).命名服务(Naming Service).集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务.ZooKeeper本身可以以Standalone模式安装运 行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证…
注:大家常说的ssh其实就是一个免密码访问的东西,为了简化操作的,不用每次访问其他节点重新输入密码.但是要想配置如下: .在每台机器上执行 ssh-keygen -t rsa,连敲三次回车键(即设置空密码) .然后在每台机器上都执行cd ~/.ssh,并分别把id_rsa.pub复制到authorized_keys中, 即执行 cp id_rsa.pub authorized_keys .然后分别把slave0,slave1的authorized_keys都复制到master主节点的author…
0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运行环境,并设置GOROOT和GOPATH环境变量 安装Go环境教程此处不再介绍,网络搜索即可. GOROOT为Go环境所安装的路径 GOPATH为创建的Go项目默认存放的位置 我的电脑安装信息: 2.安装Git 因为后续下载cobra库时需要用到git命令,所以此处需要事先安装Git. 下载地址:h…
Redis单机版搭建上一篇已经基本介绍了,下面讨论Redis集群搭建方案和示例. 1.关于Redis常用的集群方案(三种): a.一主多从,如一个Master.两个Slave b.薪火相传,即集群中的从节点(Slave)同时也是主节点(Master),类似于链式传递一样 c.反客为主,主节点down掉后从节点升级为主节点,通过人工干预 或者 通过Sentinel 哨兵模式来实现(下篇介绍) 2.模拟测试(以一主多从为例) 模拟主机信息(在同一台主机通过不同端口模拟): 角色 IP 端口 Mast…
golang 的坑 package main import ( "fmt" "net/http" "time" ) func Hello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello!!\n")) time.Sleep(10 * time.Second) } func main() { http.HandleFunc("/hello&q…
一.if语句 Go的流程控制主要包括条件分支.循环和并发.  if语句一般由if关键字.条件表达式和由花括号包裹的代码块组成.在Go中,代码块必须由花括号包裹.这里的条件表达式是结果类型为bool的表达式.例: if number > 10 { number += 3 } else分支: if number > 10 { } else { } if语句还支持串联 if number > 100 { } else if number < 100 { } else { } 上面的num…
一.Go语言基础 1. 基础 Go语言中的标识符必须以字母(Unicode字母,PHP/JS可以用中文作为变量名)下划线开头.大写字母跟小写字母是不同的:Hello和hello是两个不同的名字.  Go中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for imp…
1.使用yum安装 yum install go 这个命令可以将go环境安装到linux上. 2.配置gopath 第一步安装成功的go命令会被放入/usr/lib/golang/bin /usr/lib/golang 该目录是yum install go安装的目录,所以go相关的都在这里. 使用命令:vim /etc/profile 打开profile文件 在文件末尾填入如下内容: export GOROOT=/usr/lib/golang export GOBIN=$GOROOT/bin e…
golang程序结构 2.1 命名 Golang中的命名遵循这样一个简单原则,名字的开头必须是字母或者下划线,后面跟字母.数字或者下划线(这里与C语言中是一致的). 在函数内部声明的实体,即局部变量,只在函数内部有效.在函数外定义的变量,在整个包内有效(注意是包,不是文件,多个文件可以属于同一个包). 首字母的大小写决定了是否对其他包可见,首字母小写只对本包内有效,首字母大写对于其他包可见.比如,fmt.Println()函数名字的首字母大写,可以在其他包内引用该函数. 名字中出现多个单词时,习…
----------- golang打包和部署到centos7. 参考:https://blog.csdn.net/qq_33230584/article/details/81536572…
golang里,操作mysql数据库,使用查询语句的时候,一般的写法 rows, err := db.Query("select name from table") if err != nil { return } for rows.Next() { var name string err = rows.Scan(&name) if err != nil { return } } 当查出来的字段有NULL的时候,就会报这样的错误unsupported driver ->…
在同一个问题上栽了两次,以后碰到cookie出问题多半都是因为这个. Request.Cookie(name)取Cookie的时候,返回值只有name和value cookie.go cookies = append(cookies, &Cookie{Name: name, Value: val}) 可以看到只返回了Name和Value两个值,大概是为了所谓性能吧.于是在拦截器里读取当前Cookie并重设时间的时候,Path和时间值都要重设一下.不然原来根目录下的Cookie还在,而新的Cook…
即使使用哨兵,此时的 Redis 集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于所有节点中,内存最小的数据库节点,形成木桶效应. 对 Redis 进行水平扩容,在旧版Redis 中通常使用客户端分片来解决这个问题,即启动多个 Redis 数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读取. 这种实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的 1/N.但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的节…
go语言中的main函数也是运行在一个单独的goroutine中的,一般称为 main goroutine,main函数结束时,会打断其它 goroutine 的执行,但是其它 goroutine 不会打断其它的 goroutine 的执行,除非是通过通信让对方自行中止. 先来看一个最简单的并发例子,一个时间服务器:(偏题了,不应该使用这个例子,应该突出重点,这个例子可以放到tcp那节) func main() { listener, err := net.Listen("tcp",…
通过 new 创建的引用类型对象是不完整创建,比如 map,它仅分配了字典类型本身所需的内存(指针包装),而没有分配键值存储内存,也没有初始化散列桶等内部属性,因此无法工作,如下代码就是错误的: p := new(map[string]int) m := *p m[ ages := make(map[string]int) // mapping from strings to ints 我们也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value: ages := map…
任何语言中,字符串操作API都是非常重要的,有些还是熟记比较好,当然如果记不住可以去看源码文件,不得不说GO语言源码看起来非常舒服. 可以使用反引号代替双引号,来表示原生的字符串,即不进行转义,尤其适合用于表示正则表达式.路径字符串.JSON串. 每个Unicode码点都使用同样的大小32bit来表示.这种方式比较简单统一,但是它会浪费很多存储空间,因为大数据计算机可读的文本是ASCII字符,本来每个ASCII字符只需要8bit或1字节就能表示.而且即使是常用的字符也远少于65,536个,也就是…