学习网址

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. AutoHotkey 自动化脚本工具实例

    AHK 自动按键工具 https://www.autohotkey.com/ 可实现功能 快捷键 启动 浏览器.CMD命令.弹出框 可定时执行任务 可改键 将A与B互换 可快捷替换字符串 测试如下: ...

  2. 【自然语言处理篇】--Chatterbot聊天机器人

    一.前述 ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei). 二.具体 1.安装 是的,安装超级简单, ...

  3. [翻译]Protocol Buffer 基础: C++

    目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...

  4. 1.3创建项目「深入浅出ASP.NET Core系列」

    控制台创建项目 dotnet new --help 使用控制台采集项目,务必要熟练使用命令,--help是命令帮助的指明灯,在你无法google的时候,可以离线状态最快的帮助到你. 根据模板名称,我们 ...

  5. 配置Nginx部署静态资源和自动跳转到https

    一.首先在阿里云后台添加域名解析: 二.两个网站的静态资源在以下目录: /www/temp/blog/public 三.在服务器端配置nginx: cd /etc/nginx/conf.d 添加两个文 ...

  6. C#实现注册表 LocalMachine 目录下CURD工具类

    [1]注册表是什么?         百度百科 https://baike.baidu.com/item/%E6%B3%A8%E5%86%8C%E8%A1%A8/101856?fr=aladdin [ ...

  7. Java学习点滴——初识Java

    基于<Java编程思想>第四版 前言 "程序就是算法加数据结构",而算法就是控制语句加操作符,编写一个程序就是使用控制语句加操作符去操作数据结构,因此我从Java的控制 ...

  8. Springboot2注解使用Mybatis动态SQL

    1.简单SQL使用 //从***数据表获取统计数据 @Select("select count(*) from issues where issue_type = #{type}" ...

  9. 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)

    观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...

  10. Servlet练习:实现增删改查的综合练习

    ---恢复内容开始--- 本文为原创,转载请注明出处:https://www.cnblogs.com/Tom-shushu/p/9383066.html 本篇内容主要介绍:通过Servlet,JSP, ...