包含标签 golang 的文章

Golang Oauth2 Github

Github Oauth2 首先,在github上申请一个Oauth App, 获取client id / secret 需要这些信息,下边的代码是放在环境变量中 AUTH_URL = os.Getenv("AUTH_URL") // github authorization url TOKEN_URL = os.Getenv("TOKEN_URL") // github token url CLIENT_ID = os.Getenv("CLIENT_ID") // client id CLIENT_SECRET = os.Getenv("CLIENT_SECRET") // client secret REDIRECT_URL = os.Getenv("REDIRECT_URL") // the redirect url 在包的初始化代码中,初始化 var ( oauth2Config *oauth2.Config ) init() { oauth2Config = &oauth2.Config{ ClientID: CLIENT_ID, ClientSecret: CLIENT_SECRET, RedirectURL: REDIRECT_URL, // Discovery returns the OAuth2 endpoints. Endpoint: oauth2.Endpoint{ AuthURL: AUTH_URL, TokenURL: TOKEN_URL, AuthStyle: oauth2.AuthStyleInHeader, }, Scopes: []string{"openid", "email", "site_admin", "repo", "admin:org", "user"}, } Login……

阅读全文

Terminate Golang App

channel to terminate 在 main.go中, 创建一个channel接收os.Signal sigChan := make(chan os.Signal, 1) // ctrl+c->SIGINT, kill -9 -> SIGKILL signal.Notify(sigChan, syscall.SIGINT, syscall.SIGKILL) 在main.go快结束的位置,加上 <-sigChan log.Info("exit") 如果用户有发送kill -9 或者ctrl+c, 会接收到这个信号。……

阅读全文

Golang Cron Jobs

cron in golang 在golang中,有个包github.com/robfig/cron/v3可以实现linux中类似的cron功能,使用也比较简单。 官方文档中比较详细,这里只是简单记录一下。 c := cron.New() schlTime := "0 2 * * ?" // send reminder for org members c.AddFunc(schlTime, func() { log.Info("Send reminder for org member expiration job started") defer func() { log.Info("Send reminder for org member expiration job finished") }() log.Info("started to remind expired org members") err = task.RemindExpiredOrgMember(14) if err !=……

阅读全文

Gin Jwt Middleware

JWT in golang golang中的jwt包一般是使用 github.com/dgrijalva/jwt-go, 而且godoc中已经有些example,这里只是记录一下使用 jwt.StandardClaims的情况。 func parseToken(tokenString string) (*jwt.StandardClaims, error) { token, err := jwt.ParseWithClaims(tokenString, &jwt.StandardClaims{}, func(t *jwt.Token) (interface{}, error) { return jwtKey, nil }) if err != nil { log.Errorf("error: %v", err) return nil, fmt.Errorf("failed to parse the token string: %s", tokenString) } log.Printf("claims: %v", token.Claims) if claims, ok := token.Claims.(*jwt.StandardClaims); ok && token.Valid { return claims, nil } else { return nil, errors.Wrap(fmt.Errorf("failed to valiate the token"), "failed") } }……

阅读全文

Golang 中的零值

zero value (零值) 在golang中,零值会在很多地方隐式的用到,所以把零值列出来。 0 所有的integer类型 (int32/int64/…) 0.0 所有的float类型 (float32/float64/…) false boolean类型 "" string类型, 这点要特别注意,从java过来的开发人员容易认为 nil是把 string和nil比较, 应该 str == "" ,不是 str == nil nil interface, slices,……

阅读全文

Golang Panic 的时候通过defer更新返回值

在panic的函数中更新返回值 在golang中我们知道可以用defer, panic, recover来处理一些情况,比如,一般panic的话,如果在函数中没有处理,就会向上继续抛出 有时候,我们希望在出错的情况下,能够返回一个值。这个时候,defer就会比较好的处理这种情况。 func test() (r int) { defer func() { if……

阅读全文

Go Download From Private Repo in Docker

问题 有时候开发的go project会用到一些私有仓库,或者自己搭的。比如用到了github.ibm.com里面的代码,如果在go.mod里面设置的 是github.ibm.com的网址的话,会发现build docker image的时候,提示access rights的问题。 方法 在你的Docke……

阅读全文

Go Gorm 操作数据库

Go/Gorm 操作 Postgres 虽然go提供了database/sql包来操作数据库,但是如果有个ORM的包,可以直接操作model来操作数据库,就像node里面的sequelize,是不是 也是挺好的。Gorm就实现了这个功能,这个包目前是github上star数最多的go orm包,包括中文资料,对小伙……

阅读全文

Golang 导出 csv 乱码的问题

问题提出 golang最近导出csv的时候,如果用excel打开,会有乱码。在网上查到了解决方案,记录一下。 解决方案 f, err := os.Create("data.csv") if err != nil { panic(err) } defer f.Close() f.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM,避免使用Microsoft Excel打开乱码 writer := csv.NewWriter(f) writer.Write([]string{"col 1", "col 2", "col 3"}) writer.Flush()……

阅读全文

转换Pdf成图片

背景 在做文字检测和文字识别的时候,有时候客户提供的是pdf格式的文件,而不是jpg/png格式,这时候就需要把pdf里面多个页面 保存成图片。 代码库pdf2image 实现 Python 参考readme docker 参考readme golang 参考readme 也可以 直接下载可执行文件直接执行 -> https://github.com/jerrywang1981/pdf2images/blob/master/pdf2image……

阅读全文