golang学习和使用经验总结
学习网址
https://studygolang.com/pkgdoc go标准库网站
https://blog.csdn.net/sanxiaxugang/article/details/60324012 strings库介绍
https://blog.csdn.net/wangshubo1989/article/details/70177928 bufio包介绍
http://www.01happy.com/golang-mysql-demo/ go 操作mysql示例
https://www.cnblogs.com/wdliu/p/9330278.html go操作redis和mysql
http://www.flysnow.org/2017/05/12/go-in-action-go-context.html go context详解
杂项条目
- 字符串字面量由双引号或者反引号(注意不是单引号) 来创建。如
"abc",`abc`
- go没有枚举类型,使用const
如:
type LineState int
// iota 初始化后会自动递增
const (
ReadCommonReuqest LineState = iota // value --> 0
ReadRespResult // value --> 1
GetParser // value --> 2
ReadCustomerLoginRequest // value --> 3
ReadClientLoginRequest
ReadNotify
ReadRelogin
ReadCustomerLogoutResp
ReadClientLogout
ReadWebResp
ReadWebLoginRequest
ReadCustomerLogoutRequest
ReadHeartBeat
)
- 变量批量声明
var a,b,c int - fmt包提供了打印函数,可以将数据以字符串形式输出到控制台、文件、活着其他满足io.writer 接口的值以及字符串中
//如格式化输出字符串:
encyres := “abc”
httpstr := fmt.Sprintf("POST / HTTP/1.1\r\n" +
"Host: 192.168.2.179:26311\r\n" +
"User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)\r\n" +
"Accept-Encoding: gzip, deflate\r\n" +
"Connection: Keep-Alive\r\n" +
"content-type: Application/json;charset=utf-8\r\n" +
"Cache-Control: no-cache\r\n" +
"Content-Length: %d\r\n\r\n%s",len(encyres),encyres)
使用strconv包来解决字符串转其他类型变量的问题
获取字符串长度 len([]rune(string))
go定时器
func demo() {
t1 := time.NewTimer(time.Second * 5)
t2 := time.NewTimer(time.Second * 10)
for {
select {
case <-t1.C:
println("5s timer")
t1.Reset(time.Second * 5)
case <-t2.C:
println("10s timer")
t2.Reset(time.Second * 10)
}
}
}
- string 和 []byte相互转换
//string 转为[]byte
var str string = "test"
var data []byte = []byte(str)
//byte转为string
var data [10]byte
byte[0] = 'T'
byte[1] = 'E'
var str string = string(data[:])
//获取字符串子串
index := strings.Index(line,"{")
fmt.Println(line[index:])
- 字符串比较是否相等
strings.Compare("GO","go" )
strings.EqualFold("GO","go") //不区分大小写
- bytes.Buffer 使用
一种byte类型的缓冲器 https://blog.csdn.net/txj236/article/details/52130439
- 按行读取文件
f, err := os.Open(file)
if err != nil {
panic(err)
}
defer f.Close()
rd := bufio.NewReader(f)
for {
line, err := rd.ReadString('\n') //以'\n'为结束符读入一行
if err != nil || io.EOF == err {
break;
}
}
- 预编译 正则表达式
/*预编译正则表达式*/
jsonre, _ = regexp.Compile("{.*}")
捕获匹配正则表达式的字符串
result_json_str := jsonre.FindString(line)字符串替换
strings.Replace(str, "_", "-", -1) //-1表示替换所有,正数表示替换个数声明无缓冲 通道
var done = make(chan int)声明带缓冲通道
var sqlchan = make(chan string, 1000)从json读取一个字段的值并进行转换,字段不存在或者转换错误还能给出默认值的函数
func GetJsonValueInt64(jsonbody *simplejson.Json, keyname string) int64 {
var value int64
valuestr, err := jsonbody.Get(keyname).String()
if err != nil {
fmt.Println(err.Error())
value = 0
} else {
value, err = strconv.ParseInt(valuestr, 10, 0)
if(err != nil){
value = 0
}
}
return value
}
- 定义一个预分配空间长度为0的切片(类似于C++中vector的reserve函数)
/*allocates an underlying array of size 10 and returns a slice of length 0 and capacity 10 that is backed by this underlying array.*/
make([]int, 0, 10)
- 判断一个通道是否被关闭的模型
//使用 for range 语句判断
func GetChan()(chan int){
var c = make(chan int)
go func() {
for num := range c{
fmt.Printf("Get num from Chane:%d\n",num)
}
// 主线程关闭chan后会执行到这里
fmt.Println("chan is closed")
done <- 1
}()
return c
}
将int 转化为
string str := strconv.FormatInt(ressultcode,10))interface与其它类型转换
func formatTimeStamp(in interface{}, layout string) (out string) {
timeStr := in.(int)
month, err := time.Parse(layout, string(timeStr))
if err != nil {
return time.Now().Format(layout)
}
return month.Format(layout)
}
查看某个变量的具体type
obj.(type)接口类型转化
var user = map[string]interface{}{
"age": 30,
"address": "Beijing Tongzhou",
"married": true,
}
var age = user["age"].(int)
var address = user["address"].(string)
var married = user["married"].(bool)
- 命令行参数
使用os.Args
os.Args是一个字符串slice,长度可以用len(os.Args)来表示
if len(os.Args) < 6 {
fmt.Println("usage: --host=xxx --port=xxx --username=xxxx --passwd=xxx --dbname=xxxx")
return
}
for i := range os.Args{
fmt.Println(os.Args[i])
}
- for 是go语言里唯一的循环语句
golang学习和使用经验总结的更多相关文章
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- Golang学习 - 学习资源列表
Golang 学习资源: <Go 语言圣经(中文版)> - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...
- Golang学习:sublime text3配置golang环境
最近导师让学习golang, 然后我就找了些有关golang的学习视频和网站. 昨天在电脑上下载了go tools, 之后在sublime上配置了golang的运行环境.By the way, 我的电 ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- golang学习笔记19 用Golang实现以太坊代币转账
golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
随机推荐
- 49个Spring经典面试题总结,附带答案,赶紧收藏
1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年.这是第一个支持注解的版本. Spr ...
- [ZJOI2007] 捉迷藏
idea1 可能会死掉的想法:考虑点分治维护每个分治中心x到达分治块内的个点距离,具体是用堆维护分治快内的x的儿子y到y的子树内的所有点距离(记为C[y]),取所有C[y]的top+e(x,y)放入x ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 单一职责
第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 第4篇 ...
- 批量执行工具PSSH详解
批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...
- AppDir【创建缓存目录】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...
- mysql_8.0.12环境配置
1. 官网下载mysql_8.0.12免安装包,解压到你存放的地方: 2. 配置环境变量(把bin的文件夹弄进系统path里面): 3. 在解压的根路径中,查看是否含有my.ini文件,没有就新建一个 ...
- dotnet core 微服务教程
这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...
- .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)
前言: 自从.net core问世之后,就一直想了解.但是由于比较懒惰只是断断续续了解一点.近段时间工作不是太忙碌,所以偷闲写下自己学习过程.慢慢了解.net core 等这些基础方面学会之后再用.n ...
- jQuery(一)、核心
我认为,学习一门语言,主要是掌握它的思想与用途,就好比谈恋爱一样,你只要猜测到了对方的想法,就能够知情达意.废话不多说,我们开始今天学习的进度,加油ヾ(◍°∇°◍)ノ゙ 1. jQuery([sele ...
- SD 笔记01
sap组织结构:代表一个企业的组织视图的结构.根据业务处理,可以设置自己工时的结构.形成一个支持所有业务活动的框架. 集团公司代码销售区域 :销售组织.销售渠道.产品组:工厂库存地点装运地点 集团:c ...