学习网址

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. cxf 整合 spring 时 java.lang.VerifyError异常

    异常信息主要有两个,Falling off the end of the code 和 illegal instruction found at offset 1: java.lang.VerifyE ...

  2. chrome谷歌浏览器开发者工具-网络带宽控制

    有时候我们想在本地测试一下图片预加载loading的加载情况,如下图: 可无奈一般网络带宽都比较好,基本上看不到效果,图片一下子就加载出来了, 可能这个时候有些小伙伴想到的办法是用定时器延迟加载 其实 ...

  3. echarts中提示框的样式调整

    第一种方法:利用tooltip 里面的配置项 默认就会有写显示 第二种方法:利用formattet回调函数 返回我们想要显示的信息 formatter : function (params) { va ...

  4. 《HelloGitHub》第 27 期

    公告 网站新增了简单的搜索功能,可以通过项目名称或地址搜索.查看项目.欢迎star和推荐项目,我们一只在路上,希望志同道合者加入进来. 现招募专栏负责人: C# Java <HelloGitHu ...

  5. 让ASP.NET Core支持GraphQL之-GraphQL的实现原理

    众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful的优越性是毋庸置疑 ...

  6. 痞子衡嵌入式:ARM Cortex-M内核MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是ARM Cortex-M内核微控制器相关知识. ARM公司从2004年开始推出Cortex-M系列内核,迄今Cortex-M家族已经包 ...

  7. GoLang simple-project-demo-01

    Hello world 经典例子: package main import "fmt" func main(){ fmt.Println("hello world&quo ...

  8. js正则表达式替换HTML标签以及空格(&nbsp;)

    参考:范仁义 js代码: function filter(text) { var reg = /<[^<>]+>/g;//1.全局匹配g肯定忘记写,2.<>标签中不 ...

  9. PHP接口APP接口

    使用PHP来生成APP接口数据是非常简单的,如果你还不了解PHP没有关系,只需要看过PHP的基本语法,再看本示例就可以了. APP接口一般都是json格式(当然也有少数xml格式)遵循restful规 ...

  10. 复活广州.net俱乐部

    上个月张队长在深圳搞了一场活动,我们广州这边的.net粉丝也去了几个,我刚好有辆破车,于是我们一车会合后出发去深圳参加活动了,和大家在车上的交流使我感触良多.只说几点和本文相关的: .net在中国的生 ...