学习网址

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学习和使用经验总结的更多相关文章

  1. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  2. Golang学习 - 学习资源列表

    Golang 学习资源: <Go 语言圣经(中文版)>  - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...

  3. Golang学习:sublime text3配置golang环境

    最近导师让学习golang, 然后我就找了些有关golang的学习视频和网站. 昨天在电脑上下载了go tools, 之后在sublime上配置了golang的运行环境.By the way, 我的电 ...

  4. golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题

    golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...

  5. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

  6. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

  7. golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍

    golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...

  8. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  9. golang学习笔记14 golang substring 截取字符串

    golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...

随机推荐

  1. 49个Spring经典面试题总结,附带答案,赶紧收藏

    1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年.这是第一个支持注解的版本. Spr ...

  2. [ZJOI2007] 捉迷藏

    idea1 可能会死掉的想法:考虑点分治维护每个分治中心x到达分治块内的个点距离,具体是用堆维护分治快内的x的儿子y到y的子树内的所有点距离(记为C[y]),取所有C[y]的top+e(x,y)放入x ...

  3. .NET Core TDD 前传: 编写易于测试的代码 -- 单一职责

    第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 第4篇 ...

  4. 批量执行工具PSSH详解

    批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...

  5. AppDir【创建缓存目录】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...

  6. mysql_8.0.12环境配置

    1. 官网下载mysql_8.0.12免安装包,解压到你存放的地方: 2. 配置环境变量(把bin的文件夹弄进系统path里面): 3. 在解压的根路径中,查看是否含有my.ini文件,没有就新建一个 ...

  7. dotnet core 微服务教程

    这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...

  8. .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)

    前言: 自从.net core问世之后,就一直想了解.但是由于比较懒惰只是断断续续了解一点.近段时间工作不是太忙碌,所以偷闲写下自己学习过程.慢慢了解.net core 等这些基础方面学会之后再用.n ...

  9. jQuery(一)、核心

    我认为,学习一门语言,主要是掌握它的思想与用途,就好比谈恋爱一样,你只要猜测到了对方的想法,就能够知情达意.废话不多说,我们开始今天学习的进度,加油ヾ(◍°∇°◍)ノ゙ 1. jQuery([sele ...

  10. SD 笔记01

    sap组织结构:代表一个企业的组织视图的结构.根据业务处理,可以设置自己工时的结构.形成一个支持所有业务活动的框架. 集团公司代码销售区域 :销售组织.销售渠道.产品组:工厂库存地点装运地点 集团:c ...