git 命令大全

1. git config

配置 Git 的相关参数。

Git 一共有3个配置文件:

阅读全文

博客改造

1.拓宽博客的宽度

2.增加博客导航页面

导航页面图标:https://github.com/FortAwesome/Font-Awesome

阅读全文

map 遍历的两种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

func main() {

m := map[string]bool{"a": true, "b": false}
for k := range m {
fmt.Println(k)
}

for k, v := range m {
fmt.Println(k, v)
}

}

//a
//b
//a true
//b false

阅读全文

float64相加减

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
"fmt"
"math/big"
"strconv"
)

func main() {
x := 2.1
y := 0.8
fmt.Println(x+y)
fmt.Println(float64Add(x,y))
}

func float64Add(x float64, y float64, more ...float64) float64 {
floatX := new(big.Float).SetFloat64(x)
floatY := new(big.Float).SetFloat64(y)
result := new(big.Float).Add(floatX, floatY)
if len(more) > 0 {
for _, m := range more {
floatM := new(big.Float).SetFloat64(m)
result = new(big.Float).Add(result, floatM)
}
}
f, _ := strconv.ParseFloat(result.String(), 64) // 忽略 error
return f
}

阅读全文

项目中转json的问题

由于调用 http 接口返回的数据格式类型由 string 变成了 int64,导致在转 json 时出错,凑巧 转 json 没有处理 error,而是 _ = fastjson.Unmarshal([]byte(resp), bpR,于是给定位问题增加了难度,通过这次调查 bug,总结到以下几点:

阅读全文

github.com-olivere-elastic-v7-es连接框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main

import (
"context"
"fmt"

"github.com/olivere/elastic/v7"
)

var client *elastic.Client


func init() {
var err error
client, err = elastic.NewClient(elastic.SetURL("http://xmge.top:9200/"),elastic.SetSniff(false))
if err != nil {
panic(err)
}
fmt.Println("connect to es success")
}


type Person struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
Married bool `json:"married"`
CompanyId int `json:"company_id"`
}

type Company struct {
Id int `json:"id"`
Name string `json:"name"`
Location string `json:"location"`
}

func main() {
persons := []Person{
{1, "小明", 30, true,1},
{2, "小白", 30, true,1},
{3, "小黑", 28, true,2},
{4, "小红", 27, true,3},
{5, "小蓝", 26, true,3},
}
insertPersons("users",persons...)

companys := []Company{
{1, "A公司", "西二旗"},
{2, "B公司", "上地"},
{3, "C公司", "望京"},
}
insertCompany("company",companys...)
}


func insertPersons(index string,items ...Person) {
for _, item := range items {
put1,err :=client.Index().Index(index).BodyJson(item).Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed %s %s to index %s, type %s\n", index,put1.Id, put1.Index, put1.Type)
}
}

func insertCompany(index string,items ...Company) {
for _, item := range items {
put1,err :=client.Index().Index(index).BodyJson(item).Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed %s %s to index %s, type %s\n", index,put1.Id, put1.Index, put1.Type)
}
}

阅读全文

通过域名获取ip

当网络不通的情况下,通常会想到ping命令,ping一下,但是ping命令内部如何执行的,可能并不清楚,其实ping是基于ICMP协议进行工作的。

ip 和 icpm文章: https://www.cnblogs.com/ssh-html/p/10436168.html

阅读全文

postgres-InsertOrUpdate

1
2
3
4
5
6
7
8
9
10
11
12

func (um *UModel) InsertOrUpdate(session *xorm.Session) (int64, error) {

sql := fmt.Sprintf(`INSERT INTO %s (id,user_id,mine_id,status) VALUES(?,?,?,?)
ON CONFLICT (user_id,mine_id) DO UPDATE SET
status = ?;`, um.TableName())
result, err := session.SQL(sql, um.Id, um.UserId, um.MineId, um.Status).Execute()
if err != nil {
return -1, err
}
return result.RowsAffected()
}

阅读全文

测试代码如何写的更好?

1、结果输出在代码下面

1
2
3
4
5
6
7
8
9
func ExampleHasPrefix() {
fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("Go")))
fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("C")))
fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("")))
// Output:
// true
// false
// true
}

阅读全文

排查-goroutine-阻塞问题

阻塞时现象:cpu 利用率降低,内存使用率上升

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
"fmt"
"log"
"net/http"
_ "net/http/pprof"
"time"
)

// goroutine 阻塞时的排查方法
// 项目中首先要引进 pprof
// 通过访问 host/debug/pprof/goroutine?debug=1 即可查看出哪里的 goroutine 阻塞了
// 通过访问 host/debug/pprof/goroutine?debug=2 可以更详细的查看每个 goroutine 的信息

var c = make(chan int)

func main() {

// 模拟 goroutine 阻塞
go func() {
for range time.Tick(time.Microsecond*100){
c <- time.Now().Second()
}
}()

for i := 0; i < 100; i++ {
go func() {
for {
fmt.Println(<-c)
}
}()
}

// 多次访问 /ping 模拟阻塞的 goroutine
http.HandleFunc("/ping", func(writer http.ResponseWriter, request *http.Request) {
select {}
})

log.Fatal(http.ListenAndServe(":8080",nil))
}

阅读全文