{"id":24638204,"url":"https://github.com/miyamo2/xtract","last_synced_at":"2025-03-20T09:26:52.035Z","repository":{"id":244346331,"uuid":"814857392","full_name":"miyamo2/xtract","owner":"miyamo2","description":"Extract from collection and build iterator","archived":false,"fork":false,"pushed_at":"2024-08-18T12:51:48.000Z","size":53,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T23:37:46.572Z","etag":null,"topics":["goexperiment","golang","rangefunc"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miyamo2.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2024-06-13T21:20:21.000Z","updated_at":"2024-08-18T12:51:47.000Z","dependencies_parsed_at":"2024-06-19T02:49:17.064Z","dependency_job_id":"36a33707-a4f7-43ae-9548-57d64543b923","html_url":"https://github.com/miyamo2/xtract","commit_stats":null,"previous_names":["miyamo2/xtract"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyamo2%2Fxtract","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyamo2%2Fxtract/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyamo2%2Fxtract/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyamo2%2Fxtract/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miyamo2","download_url":"https://codeload.github.com/miyamo2/xtract/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244584792,"owners_count":20476610,"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":["goexperiment","golang","rangefunc"],"created_at":"2025-01-25T10:13:26.243Z","updated_at":"2025-03-20T09:26:52.010Z","avatar_url":"https://github.com/miyamo2.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xtract\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/miyamo2/xtract.svg)](https://pkg.go.dev/github.com/miyamo2/xtract)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/miyamo2/xtract)](https://img.shields.io/github/go-mod/go-version/miyamo2/xtract)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/miyamo2/xtract)](https://img.shields.io/github/v/release/miyamo2/xtract)\n[![codecov](https://codecov.io/gh/miyamo2/xtract/graph/badge.svg?token=PXU3HXGBWQ)](https://codecov.io/gh/miyamo2/xtract)\n[![Go Report Card](https://goreportcard.com/badge/github.com/miyamo2/xtract)](https://goreportcard.com/report/github.com/miyamo2/xtract)\n[![GitHub License](https://img.shields.io/github/license/miyamo2/xtract?\u0026color=blue)](https://img.shields.io/github/license/miyamo2/xtract?\u0026color=blue)\n\nExtract from collection and build iterator.\n\n## Quick Start\n\n### Install\n\n```sh\ngo get github.com/miyamo2/xtract\n```\n\n### Setup `GOEXPERIMENT`\n\n\u003e [!IMPORTANT]\n\u003e \n\u003e If your Go project is Go 1.23 or higher, this section is not necessary.\n\u003e \n\u003e Also, if Go 1.21 or lower, you will need to update to Go 1.22.\n\n```sh\ngo env -w GOEXPERIMENT=rangefunc\n```\n\n### Usage\n\n```go\ns := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 100, 101}\nxt := xtract.FromSlice(s)\neven := xt.ByValue(func(i int) bool { return i%2 == 0 })\nodd := xt.ByValue(func(i int) bool { return i%2 != 0 })\n\nfmt.Println(\"---even---\")\nfor v := range even.Values() {\n    fmt.Println(v)\n}\n\nfmt.Println(\"---odd---\")\nfor v := range odd.Values() {\n    fmt.Println(v)\n}\n\nevenAndTwoDigits := even.ByValue(func(i int) bool { return i \u003e 9 \u0026\u0026 i \u003c 100 })\nfmt.Println(\"---even and two digits---\")\nfor v := range evenAndTwoDigits.Values() {\n    fmt.Println(v)\n}\n\noddAndTwoDigits := odd.ByValue(func(i int) bool { return i \u003e 9 \u0026\u0026 i \u003c 100 })\nfmt.Println(\"---odd and two digits---\")\nfor v := range oddAndTwoDigits.Values() {\n    fmt.Println(v)\n}\n// Output: ---even---\n//0\n//2\n//4\n//6\n//8\n//10\n//100\n//---odd---\n//1\n//3\n//5\n//7\n//9\n//11\n//101\n//---even and two digits---\n//10\n//---odd and two digits---\n//11\n```\n\n#### With `SliceExtractor.ByValue`\n\n```go\ns := []string{\"go\", \"iterator\", \"range over func\"}\nxt := xtract.FromSlice(s).ByValue(func(v string) bool { return len(v) \u003c 9 })\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: go\n//iterator\n```\n\n#### With `SliceExtractor.ByKey`\n\n```go\ns := []string{\"go\", \"iterator\", \"range over func\"}\nxt := xtract.FromSlice(s).ByKey(func(i int) bool { return i \u003e 0 })\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: go\n//iterator\n```\n\n#### With `SliceExtractor.ByKeyAndValue`\n\n```go\ns := []string{\"go\", \"iterator\", \"range over func\"}\nxt := xtract.FromSlice(s).ByKeyAndValue(func(i int, v string) bool { return i \u003e 1 \u0026\u0026 len(v) \u003e 6 })\nfor v := range xt.Values()\n    fmt.Println(v)\n}\n// Output: range over func\n```\n\n#### With `SliceExtractor.Limit`\n\n```go\ns := []string{\"go\", \"iterator\", \"range over func\"}\nxt := xtract.FromSlice(s).Limit(1)\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: go\n```\n\n#### With `SliceExtractor.Offset`\n\n```go\ns := []string{\"go\", \"iterator\", \"range over func\"}\nxt := xtract.FromSlice(s).Offset(1)\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: iterator\n//range over func\n```\n\n#### With `MapExtractor.ByValue`\n\n```go\nm := map[string]string{\"language\": \"go\", \"design pattern\": \"iterator\", \"implementation\": \"range over func\"}\nxt := xtract.FromMap(m).ByValue(func(v string) bool { return len(v) \u003c 8 })\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: go\n```\n\n#### With `MapExtractor.ByKey`\n\n```go\nm := map[string]string{\"language\": \"go\", \"design pattern\": \"iterator\", \"implementation\": \"range over func\"}\nxt := xtract.FromMap(m).ByKey(func(k string) bool { return strings.Contains(k, \" \") })\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: iterator\n```\n\n#### With `MapExtractor.ByKeyAndValue`\n\n```go\nm := map[string]string{\"language\": \"go\", \"design pattern\": \"iterator\", \"implementation\": \"range over func\"}\nxt := xtract.FromMap(m).ByKeyAndValue(func(k, v string) bool { return strings.Contains(k, \"e\") \u0026\u0026 len(v) \u003c 8 })\nfor v := range xt.Values() {\n    fmt.Println(v)\n}\n// Output: go\n```\n\n#### With `MapExtractor.Limit`\n\n```go\nm := map[string]string{\"language\": \"go\", \"design pattern\": \"iterator\", \"implementation\": \"range over func\"}\nxt := xtract.FromMap(m).Limit(1)\n\nvalues := make([]string, 0, 1)\nfor v := range xt.Values() {\n    values = append(values, v)\n}\nfmt.Println(len(values))\n// Output: 1\n```\n\n#### With `MapExtractor.Offset`\n\n```go\nm := map[string]string{\"language\": \"go\", \"design pattern\": \"iterator\", \"implementation\": \"range over func\"}\nxt := xtract.FromMap(m).Offset(1)\n\nvalues := make([]string, 0, 1)\nfor v := range xt.Values() {\n    values = append(values, v)\n}\nfmt.Println(len(values))\n// Output: 2\n```\n\n## Contributing\n\nFeel free to open a PR or an Issue.\n\n## License\n\n**xtract** released under the [MIT License](https://github.com/miyamo2/xtract/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyamo2%2Fxtract","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiyamo2%2Fxtract","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyamo2%2Fxtract/lists"}