分类 go 中的文章

golang 使用反射处理 string, 用于 request body 中的 string 字段进行 trim

将 struct 中的string 字段进行 trim func trimSpace(any interface{}) { ov := reflect.ValueOf(any) if ov.Kind() == reflect.Ptr && !ov.IsNil() { ov = ov.Elem() } ot := reflect.TypeOf(any) if ot.Kind() == reflect.Ptr { ot = ot.Elem() } for i := 0; i < ot.NumField(); i++ { field := ov.Field(i) if field.Kind() == reflect.Ptr { if field.Elem().Kind() == reflect.Struct { trimSpace(field.Interface()) continue } field = field.Elem() } if field.CanInterface() && field.IsValid() { if field.……

阅读全文

golang 处理图片

支持不同格式之间的转换 支持图片像素的压缩以及拉长 package main import ( "bytes" "errors" "fmt" "image" "image/jpeg" "image/png" "io/ioutil" "os" "golang.org/x/image/draw" _ "golang.org/x/image/webp" // for RegisterFormat ) type imageHelper struct { img image.Image fileName string format string scale draw.Scaler } func NewImageHelper(fileName string, scale ...draw.Scaler) *imageHelper { var s draw.Scaler if scale == nil { s = draw.ApproxBiLinear } else { s = scale[0] } return &imageHelper{ fileName: fileName, scale: s, } } func (r *imageHelper) GuessFileFormat() (string, error) { if r.……

阅读全文

golang 合并多个文件

package main import ( "fmt" "github.com/coreos/pkg/progressutil" "io" "os" "path/filepath" "time" ) func combineMultipleFiles(outPutFile string, files ...string) { abs, err := filepath.Abs(outPutFile) if err != nil { panic("can not get outPutFile absolute path") } dir := filepath.Dir(abs) if _, err := os.Stat(dir); err != nil { if os.IsNotExist(err) { err := os.MkdirAll(dir, os.ModePerm) if err != nil { panic(fmt.Sprintf("can not mkdirs, path: %s, err: %s", dir, err)) } } } file, err := os.……

阅读全文

golang validator 支持翻译以及使用 json tag

package main import ( "encoding/json" "fmt" "github.com/go-playground/locales/en" "github.com/go-playground/locales/zh" "github.com/go-playground/locales/zh_Hant_TW" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" entranslations "github.com/go-playground/validator/v10/translations/en" zhtranslations "github.com/go-playground/validator/v10/translations/zh" zhtwtranslations "github.com/go-playground/validator/v10/translations/zh_tw" "reflect" "strings" ) type InternalAccountTransferRequest struct { Name string `json:"name" binding:"required"` Age string `json:"age_test" binding:"required"` Class string `binding:"required"` } func main() { s := `{"name": "123"}` var requset InternalAccountTransferRequest json.Unmarshal([]byte(s), &requset) //requset.Class = "123" v := validator.New() var err error uni := ut.New(en.New(), en.New(), zh_Hant_TW.New(), zh.New()) zh_, _ := uni.GetTranslator("zh") zhtranslations.RegisterDefaultTranslations(v, zh_) tw_, _ := uni.……

阅读全文