{"id":22332715,"url":"https://github.com/xgfone/go-op","last_synced_at":"2025-07-29T19:33:28.246Z","repository":{"id":157763737,"uuid":"633501782","full_name":"xgfone/go-op","owner":"xgfone","description":"Provide a common condition and setter operation.","archived":false,"fork":false,"pushed_at":"2024-11-22T09:21:44.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-22T10:25:34.324Z","etag":null,"topics":["condition","conditions","go","golang","operation","operations","operator","operators","set","setter","setters"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xgfone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-27T16:29:32.000Z","updated_at":"2024-11-22T09:21:47.000Z","dependencies_parsed_at":"2024-11-22T10:32:44.882Z","dependency_job_id":null,"html_url":"https://github.com/xgfone/go-op","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xgfone%2Fgo-op","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xgfone%2Fgo-op/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xgfone%2Fgo-op/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xgfone%2Fgo-op/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xgfone","download_url":"https://codeload.github.com/xgfone/go-op/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228041996,"owners_count":17860351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["condition","conditions","go","golang","operation","operations","operator","operators","set","setter","setters"],"created_at":"2024-12-04T04:19:28.310Z","updated_at":"2025-07-29T19:33:28.235Z","avatar_url":"https://github.com/xgfone.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go Operation\n\n[![Build Status](https://github.com/xgfone/go-op/actions/workflows/go.yml/badge.svg)](https://github.com/xgfone/go-op/actions/workflows/go.yml)\n[![GoDoc](https://pkg.go.dev/badge/github.com/xgfone/go-op)](https://pkg.go.dev/github.com/xgfone/go-op)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square)](https://raw.githubusercontent.com/xgfone/go-op/master/LICENSE)\n![Minimum Go Version](https://img.shields.io/github/go-mod/go-version/xgfone/go-op?label=Go%2B)\n![Latest SemVer](https://img.shields.io/github/v/tag/xgfone/go-op?sort=semver)\n\nProvide a common operation, such as `Condition` and `Updater`.\n\n## Install\n\n```shell\n$ go get -u github.com/xgfone/go-op\n```\n\n## Example\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/xgfone/go-op\"\n)\n\nfunc main() {\n\t// Manage the global op builders.\n\tbuilders := make(map[string]func(op.Op) string, 4)\n\tbuildOper := func(op op.Oper) string { return builders[op.Op().Op](op.Op()) }\n\tregister := func(op string, f func(op.Op) string) { builders[op] = f }\n\n\t// Register the Op builders.\n\tbuildSignEq := func(op op.Op) string {\n\t\tif s, ok := op.Val.(string); ok {\n\t\t\treturn fmt.Sprintf(\"`%s`='%s'\", op.Key, s)\n\t\t}\n\t\treturn fmt.Sprintf(\"`%s`=%v\", op.Key, op.Val)\n\t}\n\tregister(op.CondOpNotEqual, buildSignEq)\n\tregister(op.CondOpEqual, buildSignEq)\n\tregister(op.UpdateOpAdd, buildSignEq)\n\tregister(op.UpdateOpSet, buildSignEq)\n\n\t// Define a UPDATE sql builder.\n\tbuildUpdateSQL := func(table string, updaters []op.Updater, conds []op.Condition) string {\n\t\tsets := make([]string, len(updaters))\n\t\tfor i, up := range updaters {\n\t\t\tsets[i] = buildOper(up)\n\t\t}\n\n\t\twheres := make([]string, len(conds))\n\t\tfor i, cond := range conds {\n\t\t\twheres[i] = buildOper(cond)\n\t\t}\n\n\t\treturn fmt.Sprintf(\"UPDATE `%s` SET %s WHERE %s\",\n\t\t\ttable, strings.Join(sets, \", \"),\n\t\t\tstrings.Join(wheres, \" AND \"))\n\t}\n\n\t// build the UPDATE sql.\n\tColumnID := op.Key(\"id\")\n\tColumnAge := op.Key(\"age\")\n\tsql := buildUpdateSQL(\"user\",\n\t\t[]op.Updater{ColumnAge.Add(1), op.Set(\"name\", \"Aaron\")},\n\t\t[]op.Condition{ColumnID.Eq(123), op.NotEq(\"is_deleted\", false)},\n\t)\n\n\tfmt.Println(sql)\n\n\t// Output:\n\t// UPDATE `user` SET `age`=1, `name`='Aaron' WHERE `id`=123 AND `is_deleted`=false\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxgfone%2Fgo-op","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxgfone%2Fgo-op","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxgfone%2Fgo-op/lists"}