请教一下go有没有像node的underscord这样的比较火的基础工具库?
发现连字符串判空都要自己去写很蛋疼,又不愿意重复早轮子,求一个库 参考: http://underscorejs.org...阅读全文
发现连字符串判空都要自己去写很蛋疼,又不愿意重复早轮子,求一个库 参考: http://underscorejs.org...阅读全文
``` 获取到是[]byte数据,我通过string([]byte数据)转化为string后是带有转义的json字符串, 我改如何将里面的Unicode输出为中文,转化为标准的json字符串???搞了一个晚上了,完全没有头绪 如下: ``` ``` {"msg":"\u8be5\u5355\u53f7\u6682\u65e0\u7269\u6d41\u8fdb\u5c55\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff0c\u6216\u68c0\u67e5\u516c\u53f8\u548c\u5355\u53f7\u662f\u5426\u6709\u8bef\u3002","status":"-3","error_code":"13","...阅读全文
1、将结构体转换成json需要用到marshl函数(或者marshlIndent()函数)。 区别:marshl函数没有将json格式化输出,输出是一个json的字符串。----不利于直接查看json的结构。maeshldent函数 可以将json格式化输出,可阅读性提高了。 2、将json字符串转换成结构体需要用到marshl()函数。 实例如下: ```go package main import ( "log" "encoding/json" "fmt" ) type Movie struct{ Title string Year int `json:"released"` Color bool `json:"color, omitempty"` Actors []string } f...阅读全文
先上代码 package main import ( "fmt" "time" ) var ( layout string = "2006-01-02 15:04:05" startTime string = "2020-03-25 17:00:00" endTime string = "2020-03-25 19:00:00" ) func main() { start, _ := time.Parse(layout, startTime) fmt.Printf("initTime is %v\n", start) //initTime is 2020-03-25 17:00:00 +0000 UTC end, _ := time.Parse(layout, endTime) fmt.Pr...阅读全文
用到的gomodbus包是坛友slzm40编写和共享的,感谢他的无私分享,本帖只是抛砖引玉,将我自己学习的一些经历分享给大家;有关modbus包可以直接向slzm40请教或一起讨论;1、创建工程,导入modbus包包地址"github.com/thinkgos/gomodbus";2、打开虚拟串口添加一对虚拟串口 图2.1 3、打开modbus-slave软件打开modbus-slave从机软件,用来测试从机;需要注意设置通信地址和读取寄存器的地址和数量; 图3.1 4、运行代码查看可用串口,因为虚拟串口选择com1和com2,虚拟中我选择使用/dev/ttyS1 图4.1 编译运行,会提示串口打开失败,这是因为linux对设备的权限做了限制 图4.2 获取串口读写、运行等权限 图4.3 5...阅读全文
golang template模版如何判断变量是否存在/指针是否为空 也就是语法{{if .Var}}的含义。 其含义是变量Var是否为真值,判断逻辑根据变量的类型,和golang语言本身判断变量是否为真的逻辑是一样的。 数字型:值不等于零 字符串:不是空串 指针类型:不为空 布尔类型:为True值 比较常用的是指针类型是否为空(对于其他基本类型来说,可以通过简单的比较运算来完成),语义上说就是属性是否存在,举个例子来说: package main import ( "os" "log" "text/template" ) type Address struct { City string Street string Apt int } func main() { templateText ...阅读全文
package main import ( "fmt" "strings" ) func main() { fmt.Println("Hello World!") a := "golang strings.Split获取字符串中的url/域名的简易方法http://www.waylau.com/golang-strings-split-get-url/" a1 := strings.Split(a, "//")[1] a2 := strings.Split(a1, "/")[0] fmt.Println(a1) //输出为:www.waylau.com/golang-strings-split-get-url/ fmt.Println(a2) //输出为:www.waylau.com ...阅读全文
代码如下: ``` package main import ( "encoding/json" "fmt" ) type MqttClientConfigEntry struct { Broker string `json: "broker"` ClientId string `json: "clientId"` CleanSession bool `json: "cleanSession"` KeepAliveInterval uint32 `json: "keepAliveInterval"` Password string `json: "password"` Us...阅读全文
``` func main() { src := `{"iss":"magic-ios-1.0.0","iat":1487000471,"jti":"4861ed10","rbd":"dbac2c5f","uri":"/auth/hello","ttu":""}` var params interface{} err := json.Unmarshal([]byte(src), ¶ms) if err != nil { fmt.Printf("%v\n", err) return } p, _ := json.Marshal(params) fmt.Printf("%v, %s\n", params, p) } ``` 问题描述: ...阅读全文
Golang字符串遍历 package main import ( "fmt" ) func main() { v4 :=' 床前明月光, 疑似地上霜. 举着望明月, 低头思故乡. ` v6 := []rune(v4) v7 := "故" for k, v := range v6 { if string(v) == v7{ fmt.Printf("找到字符---\"%s\",\n其索引为%d\n",v7,k) fmt.Printf("%d--%c--%T\n", k, v, v) } } } 将字符串先转换为[]rune即[]int32,然后再一个个遍历, 这样才能得到一个顺序索引对应一个字符,不会隔2个才到一个中文字符,因为中文三个编码对应一个字符,直接使用for k,v := range...阅读全文
通过下边的代码可以看出,r实质是int32,占用4个字节,值是25105;s是string,占用3个字节,值是e68891. 推断r应该是unicode编码的,s是utf8编码的. package main import( "fmt" ) func main() { r := '我' fmt.Printf("%t\n", r) // %!t(int32=25105) s := "我" fmt.Printf("%t, %d %x\n", s, len(s), s) // %!t(string=我) 3 e68891 fmt.Printf("%b\n", int32(r)) // 110001000010001 // 0000 0000 0000 0000 0110 0010 0001 0001...阅读全文
package main import ( "crypto/md5" "encoding/hex" "fmt" "io" ) // 官网的例子:http://golang.org/pkg/crypto/md5/ func main() { h := md5.New() io.WriteString(h, "123456") // 需要加密的字符串为 123456 fmt.Println(h.Sum(nil)) fmt.Printf("%x\n", h.Sum(nil)) c := md5.New() c.Write([]byte("123456")) // 需要加密的字符串为 123456 cipherStr := c.Sum(nil) fmt.Println(cipherStr) fmt....阅读全文
这里有一个极其简单而又有用的 Go 项目,用来解决越来越常见的软件问题。Go 需要支持 i18n (国际化) 工具,但是现有的 Go 程序的国际化支持都比较冗长繁杂。[i18n4go](https://developer.ibm.com/open/i18n4go/)提供一个应用工作流进程 —— 从 Go 应用中提取字符串,合并他们到单个包(消除冗余),准备翻译,使底层代码容易接收他们...阅读全文
在Go语言的字符串中的常见操作 strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾。 strings.Index(s string, str string) int:判断str在s中首次出现的位置,如果没有出现,则返回-1 strings.LastIndex(s string, str string) int:判断str在s中最后出现的位置,如果没有出现,则返回-1 strings.Replace(str string, old string, new string, n int):...阅读全文
http response回来的是[]byte, 转换成string([]byte)后,是下面这种格式: "\u4eba\u5de5\u53ef\u4ee5wifi"怎么转换成中文:"人工可以wifi"呢? 求大牛帮助...阅读全文
代码如下: package main import s "strings" //别名 import ( "fmt" ) var p = fmt.Println func main() { p("Contains: ", s.Contains("test", "es")) //是否包含 true p("Count: ", s.Count("test", "t")) //字符串出现字符的次数 2 p("HasPrefix: ", s.HasPrefix("test", "te")) //判断字符串首部 true p("HasSuffix: ", s.HasSuffix("test", "st")) //判断字符串结尾 true p("Index: ", s.Index("test", "e"))...阅读全文
一、字符串转intfunc Atoi(s string) (int, error) 案例:执行结果:sf@SFdeMacBook-Pro ~/Documents/project/src/test go build int_string.gosf@SFdeMacBook-Pro ~/Documents/project/src/test ./int_stringint, 100 二、int转字符串func Itoa(i int) string 执行结果:sf@SFdeMacBook-Pro ~/Documents/project/src/test go build int_string.gosf@SFdeMacBook-Pro ~/Documents/project/...阅读全文
Stringer 是一个可以用字符串描述自己的类型。`fmt`包 (还有许多其他包)使用这个来进行输出。 我这边单单做fmt包的演示。如果有兴趣 可以自己折腾一下 package main import "fmt" type Test struct { Name string Qq string } func (t Test) String() string { return fmt.Sprintf("name=%v|qq=%v", t.Name, t.Qq) } func main() { a := Test{"xiaochuan", "1533365771"} fmt.Println(a) } 有点意...阅读全文
直接上代码: var ( randSeek = int64(1) l sync.Mutex ) //获取指定长度的随机字符串 //@params num int 生成的随机字符串的长度 //@params str string 可选,指定随机的字符串 func GetRandomSring(num int, str ...string) string { s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" if len(str) > 0 { s = str[0] } l := len(s) r := rand.New(rand.NewSource(getRandSeek())) var buf bytes...阅读全文
获取当前时间 func getNow() { // 获取当前时间,返回time.Time对象 fmt.Println(time.Now()) // output: 2016-07-27 08:57:46.53277327 +0800 CST // 其中CST可视为美国,澳大利亚,古巴或中国的标准时间 // +0800表示比UTC时间快8个小时 // 获取当前时间戳 fmt.Println(time.Now().Unix()) // 精确到纳秒,通过纳秒就可以计算出毫秒和微妙 fmt.Println(time.Now().UnixNano()) // output: // 1469581066 // 1469581438172080471 } 格式化时间显示 func formatUnixTi...阅读全文
~~~ 假如 aa:= "中国abc" fmt.Println(len(aa)) //返回 9 因为我要判断一个字符串的 标题 和 内容 标题==100限制 内容==4000限制 if (len(aa) >4000){ //这里明显错误了, 因为文章里可能包含 英文 和 中文字符 ,一个中文字符占用3个字节 //然后截取 0~4000的字符 其余不要 aa = aa[0:4000] //这样截取出来的字符串明显不正确的, 中英文 的文章组合 判断有点难啊 没思路了 } ~~...阅读全文
看到网上都是参考《Go Web编程》用的time加md5来生成 可以用更简单直接的方法 ```go import ( "fmt" "crypto/rand" ) // 生成num*2位的字符串 func RandToken(num int) string { b := make([]byte, num) rand.Read(b) return fmt.Sprintf("%x", b) } ``` 参考:https://stackoverflow.com/questions/25431658/how-to-generate-a-random-token-with-md...阅读全文
package main import ( "bytes" "strings" "testing" ) var strLen int = 1000 func BenchmarkConcatString(b *testing.B) { var str string i := 0 b.ResetTimer() for n :=0; n< b.N; n++ { str += "X" i++ if i >= strLen { i = 0 str = "" } } } func BenchmarkConcatBuffer(b *testing.B) { var buffer bytes.Buffer i := 0 b.ResetTimer() for n := 0; n < b.N; n++ { bu...阅读全文
比如 with语句 设置了一个变量 可能是数字可能是字符串,如何在中途修改这个变量的值? 另外有没有with之外的方法 谢...阅读全文
使用gorm,其中默认的ID类型是uint,我想将其转换成字符串然放到一个map[string]string里面请问应该如何操作呢?实在搜索不出解决办法了...阅读全文
golang和python有关字符串操作的对应方法 (来自:flyking) 相关包有strings, strconv 判断是否以某字符串打头/结尾 strings.HasPrefix(s string, prefix string) bool => 对应python的str.startswith strings.HasSuffix(s string, suffix string) bool => 对应python的str.endswith 字符串分割 strings.Split(s string, sep string) []string => 对应python的str.split 返回子串索引 strings.Index(s string, sub string) int => 对应py...阅读全文
package set import ( "bytes" "fmt" ) func main() { } type HashSet struct { m map[interface{}]bool } func NewHashSet() *HashSet { return &HashSet{m: make(map[interface{}]bool)} } //添加 true 添加成功 false 添加失败 func (set *HashSet) Add(e interface{}) (b bool) { if !set.m[e] { set.m[e] = true return true } return false } //删除 func (set *HashSet) Remove(e in...阅读全文
//获取本地location toBeCharge := "2015-01-01 00:00:00" //待转化为时间戳的字符串 注意 这里的小时和分钟还要秒必须写 因为是跟着模板走的 修改模板的话也可以不写 timeLayout := "2006-01-02 15:04:05" //转化所需模板 loc, _ := time.LoadLocation("Local") //重要:获取时区 theTime, _ := time.ParseInLocation(timeLayout, toBeCharge, loc) //使用模板在对应时区转化为time.time类型 sr := theTime.Unix() //转化为时间戳 类型是int64 fmt.Println(theTime) //打...阅读全文
最简单的方法是用json unmarshal,变成字符串,然后再用 json marshal生成新的map。这种方法对结构体也适用。 如果是map[string]interface{}和[]interface{}的组合,用代码递归也很简单: func DeepCopy(value interface{}) interface{} { if valueMap, ok := value.(map[string]interface{}); ok { newMap := make(map[string]interface{}) for k, v := range valueMap { newMap[k] = DeepCopy(v) } return newMap } else if valueSli...阅读全文
仅作记录,以便以后用到时查看方便。 字符串与整形: //string to 10进制int64 i,err := strconv.ParseInt(string, 10, 64) //int64 to string fmt.Sprintf("%d",int64)//我一般用这种方式 s := strconv.FormatInt(int64,10)//查找资料后得知这种方式比较正规 //string to int i, err := strconv.Atoi(string) //int to string s := strconv.Itoa(int...阅读全文
这一节看下Golang的基础语法...嘛...如果懒得看的话,记得以下两点就好: 1 Golang的变量、函数参数等等涉及到类型的声明,都是变量名写在前,类型写在后的(和正统C系语法刚好相反) 2 循环语句for通吃所有 然后,就开始啦~ Go语言基本语法 package main import ( "fmt" ) func main() { fmt.Println("Hello Azen٩(●˙▿˙●)۶…⋆ฺ") } 作用:使用fmt这个库运行输出 定义变量 var 关键字 func variableZeroValueDefine() { var a int var s string fmt.Printf("%d %q\n", a, s) } 知识点: 变量名写在前面,变量类型写在后面 ...阅读全文
学习Golang语言(4):类型--字符串 --- 跟着“码术”一起学习Golang语言,今天继续讲解Golang中的类型。今天讲解的是字符串。 **数值类型** 补充上一章节没有指出的地方: Golang还定义了三种依赖系统的类型:int、unint和uintptr。因为在32位系统和64位系统上用来表示这些类型的位数是不同的。 **字符串** Golang中另一个重要的内建类型是string。 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而Go的字符串不同,它是由字节组成的。 Go语言的字符串的字节使用UTF-8编码标识Unicode文本。 字...阅读全文
close new panic complexdelete make recover real len append print imag cap copy println close 用于channel 通讯。使用它来关闭channel delete 用于在map 中删除实例。 len 和cap 可用于不同的类型, len 用于返回字符串、slice 和数组的长度. new 用于各种类型的内存分配。 make 用于内建类型(map、slice 和channel)的内存分配。 copy 用于复制slice append 用于追加slice。 panic 和recover 用于异常处理机制 print 和println 是底层打印函数,可以在不引入fmt 包的情况下使用。 complex、re...阅读全文
我在《go语言编程》一书中看到,例子中有这样的的写法: ```go type Request struct{ Method string "method" Params string "params" } ``` 请问,string类型后面的“method”字符串,有什么用吗?我在网上没有搜到这样的使用方法,请高人指点一...阅读全文
直接代码 package main import ( "fmt" "golang-objective-go/dataFoundation/dataConvert" "io/ioutil" "os/exec" "strings" ) func main() { dir_list, e := ioutil.ReadDir("./") if e != nil { fmt.Println("read dir error") return } for _, v := range dir_list { fileName := v.Name() if strings.Contains(fileName, ".sql") { c := exec.Command("psql", "-d", "xxxx", "...阅读全文
一、获取字符串长度的几种方法 - 使用 bytes.Count() 统计 - 使用 strings.Count() 统计 - 将字符串转换为 []rune 后调用 len 函数进行统计 - 使用 utf8.RuneCountInString() 统计 例: str:="HelloWord" l1:=len([]rune(str)) l2:=bytes.Count([]byte(str),nil)-1) l3:=strings.Count(str,"")-1 l4:=utf8.RuneCountInString(str) fmt.Println(l1) fmt.Println(l2) fmt.Println(l3) fmt.Println(l4) 打印结果:都是 9 二、strings.Cou...阅读全文
看了http包的源码,发现go语言其实也可以用字符串来映射函数, 不是用反射。 主要是type func的使用, http的默认路由就是用这个方法实现的。有兴趣可以看看他的那些Handler和HandleFunc的实现,一样一样的。呵呵~~ 有用记得给我点个赞,谢谢
统计字符串每个字符出现次数!package main import ( "fmt" ) func WordCount(s string) map[string]int { var word string m := make(map[string]int) for i := 0; i < len(s); { word = s[i : i+1] fmt.Println(word) v, ok := m[word] if ok != false { m[word] = v + 1 } else { m[word] = 1 } i += 1 } return m } func main() { var str = "stringsg" fmt.Println(WordCount(str)) ...阅读全文
Golang 字符串转URLCode 最近因调用gitlab API,在生成某些字符串的时候直接请求 gitlab API 失败, url如下: keysURL := "http://192.168.1.212:10080/api/v3/user/keys?id=" + strconv.Itoa(model.Id) + "&private_token=" + privateToken + "&key=" + pub + "&title=gitclone" 查找问题发现是字符串编码问题,利用 url.QueryEscape() keysURL := "http://192.168.1.212:10080/api/v3/user/keys?id=" + strconv.Itoa(model.Id...阅读全文
golang有什么加密法可以压缩字符串(可以解密那种) 比如一个字符串200个字节 ,加密后 大概成了100个字节那种或则更少, 可以解密...阅读全文
1) 日期格式化 //Date.Format("2006-01-02 15:04:05") //时间戳 time.Now().Unix() //int64 //转为字符串 strconv.FormatInt(time.Now().Unix(), 10) 2) json //improt包:"encoding/json" //orm, _ := models.New() //var slice []models.Orginfo //orm.FindAll(&slice) //tjson, _ := json.Marshal(slice) 3)字符串转换 //字符串转int / / 包 strconv //tint, _ := strconv.Atoi(tstr) //int转字符串 //tst...阅读全文
函数: Join(a []string, sep string) string说明: 将一个字符串切片中的元素以字符 sep 进行分隔然后合并成一个字符串并返回实例: func main() { str := []string{"Hello", "World", "Good"} fmt.Println(strings.Join(str, " ")) } 程序输出 Hello World Good 函数: LastIndex(s, sep string) int说明: 判断字符 sep 在字符串 s 中最后一次出现的位置,如果成功返回 sep 位置的索引,如果字符 sep 不在字符串 s 中则返回 -1实例: func main() { str := "Hello World" fmt.Pri...阅读全文
import ( "bytes" ) //支持中文截取, 支持end 负数截取 func SubStr(source interface{}, start int, end int) string { str := source.(string) var r = []rune(str) length := len(r) subLen := end - start for { if start < 0 { break } if start == 0 && subLen == length { break } if end > length { subLen = length - start } if end < 0 { subLen = length - start + end } var s...阅读全文
go有没有像python中%这样强大的格式字符串。 比如: str = "file %s total %d lines" %(file_name, line_num) 这东西在go里要如何表达...阅读全文
package main import ( "fmt" "log" "strings" "time" ) func main() { str := "sum::goods_num" var content,content1 string var i int start1 := time.Now() for i = 0;i<1000000;i++ { content = str[5 : ] } elapsed := time.Since(start1) fmt.Println(elapsed) log.Println(content) start2 := time.Now() for i = 0;i<1000000;i++ { selectStruct := strings.Split(str...阅读全文
package main import( "fmt" ) func main(){ var yk = make(map[string][]string) yk["one"] = []string{"a123", "a456", "a789"} fmt.Println("yk[one] len = ", len(yk["one"])) i := len(yk["one"]) for j:=0; j阅读全文
引用部分: import ( "bufio" "flag" "log" "strings") 自定义字符串: var myString = "add -a=123 -b=456" func main(){ var a,b int var add = flag.NewFlagSet("add", flag.ContinueOnError) add.IntVar(&a,"a",0,"value a") add.IntVar(&b,"b",1,"value b") cmd := strings.Fields(myString) add.Parse(cmd[1:]) log.Println(a+b) } 是不是很简...阅读全文
由于项目经历了多次迭代,协议也发生了多次变化,所以导致有些数据中是hex编码,有的是base64编码,所以需要区分开来,写了一个苟且的方法来区分 func DecodeHexOrBase64(content string) ([]byte, error) { dat := []byte(content) isHex := true for _, v := range dat { if v >= 48 && v <= 57 || v >= 65 && v <= 70 || v >= 97 && v <= 102 { // isHex = true } else { isHex = false break } } if isHex { d, err := hex.DecodeString(con...阅读全文