{"id":13757663,"url":"https://github.com/zeromicro/goctl-android","last_synced_at":"2025-04-12T13:21:48.888Z","repository":{"id":44454643,"uuid":"319976704","full_name":"zeromicro/goctl-android","owner":"zeromicro","description":"goctl android plugin demo","archived":false,"fork":false,"pushed_at":"2020-12-16T11:14:23.000Z","size":19,"stargazers_count":12,"open_issues_count":2,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-26T08:03:22.573Z","etag":null,"topics":["go","go-zero","goctl","golang"],"latest_commit_sha":null,"homepage":"https://github.com/tal-tech/go-zero","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/zeromicro.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}},"created_at":"2020-12-09T14:11:02.000Z","updated_at":"2023-05-13T01:56:59.000Z","dependencies_parsed_at":"2022-09-26T17:01:15.843Z","dependency_job_id":null,"html_url":"https://github.com/zeromicro/goctl-android","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeromicro%2Fgoctl-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeromicro","download_url":"https://codeload.github.com/zeromicro/goctl-android/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248571850,"owners_count":21126524,"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":["go","go-zero","goctl","golang"],"created_at":"2024-08-03T12:00:44.305Z","updated_at":"2025-04-12T13:21:48.858Z","avatar_url":"https://github.com/zeromicro.png","language":"Go","funding_links":[],"categories":["Tools and plugins for [go-zero](https://github.com/tal-tech/go-zero)"],"sub_categories":[],"readme":"# goctl-android\n\n![go-zero](https://img.shields.io/badge/Github-go--zero-brightgreen?link=https://github.com/tal-tech/go-zero\u0026logo=github)\n![License](https://img.shields.io/badge/License-MIT-blue?link=https://github.com/zeromicro/goctl-android/blob/main/LICENSE)\n![Go](https://github.com/zeromicro/goctl-android/workflows/Go/badge.svg)\n\ngoctl-android是一款基于goctl的插件，用于生成java（android）端http client请求代码。\n本插件特性：\n* 仅支持post json\n* 支持get query参数\n* 支持path路由变量\n* 仅支持响应体为json\n\n\u003e 警告：本插件是对goctl plugin开发流程的指引，切勿用于生产环境。\n\n# 插件使用\n* 编译goctl-android插件\n    ```shell script\n    $ GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/zeromicro/goctl-android\n    ```\n* 将`$GOPATH/bin`中的`goctl-android`添加到环境变量\n* 创建api文件\n    ```go\n    info(\n    \ttitle: \"type title here\"\n    \tdesc: \"type desc here\"\n    \tauthor: \"type author here\"\n    \temail: \"type email here\"\n    \tversion: \"type version here\"\n    )\n    \n    \n    type (\n    \tRegisterReq {\n    \t\tUsername string `json:\"username\"`\n    \t\tPassword string `json:\"password\"`\n    \t\tMobile string `json:\"mobile\"`\n    \t}\n    \t\n    \tLoginReq {\n    \t\tUsername string `json:\"username\"`\n    \t\tPassword string `json:\"password\"`\n    \t}\n    \t\n    \tUserInfoReq {\n    \t\tId string `path:\"id\"`\n    \t}\n    \t\n    \tUserInfoReply {\n    \t\tName string `json:\"name\"`\n    \t\tAge int `json:\"age\"`\n    \t\tBirthday string `json:\"birthday\"`\n    \t\tDescription string `json:\"description\"`\n    \t\tTag []string `json:\"tag\"`\n    \t}\n    \t\n    \tUserSearchReq {\n    \t\tKeyWord string `form:\"keyWord\"`\n    \t}\n    )\n    \n    service user-api {\n    \t@doc(\n    \t\tsummary: \"注册\"\n    \t)\n    \t@handler register\n    \tpost /api/user/register (RegisterReq)\n    \t\n    \t@doc(\n    \t\tsummary: \"登录\"\n    \t)\n    \t@handler login\n    \tpost /api/user/login (LoginReq)\n    \t\n    \t@doc(\n    \t\tsummary: \"获取用户信息\"\n    \t)\n    \t@handler getUserInfo\n    \tget /api/user/:id (UserInfoReq) returns (UserInfoReply)\n    \t\n    \t@doc(\n    \t\tsummary: \"用户搜索\"\n    \t)\n    \t@handler searchUser\n    \tget /api/user/search (UserSearchReq) returns (UserInfoReply)\n    }\n    ```\n* 生成android代码\n    \n    ```shell script\n    $ goctl api plugin -plugin goctl-android=\"android -package com.tal\" -api user.api -dir .\n    ```\n    \u003e说明： 其中`goctl-android`为可执行的二进制文件，`\"android -package com.tal\"`为goctl-plugin自定义的参数，这里需要用引号`\"\"`引起来。\n\n我们来看一下生成java代码后的目录结构\n```text\n├── bean\n│   ├── LoginReq.java\n│   ├── RegisterReq.java\n│   ├── UserInfoReply.java\n│   ├── UserInfoReq.java\n│   └── UserSearchReq.java\n├── service\n│   ├── IService.java\n│   └── Service.java\n└── user.api\n```\n\n\u003e [点击这里](https://github.com/zeromicro/ClientCall) 查看Java示例源码\n\nmaven依赖\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.squareup.retrofit2\u003c/groupId\u003e\n    \u003cartifactId\u003eretrofit\u003c/artifactId\u003e\n    \u003cversion\u003e2.9.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.squareup.okhttp3\u003c/groupId\u003e\n    \u003cartifactId\u003eokhttp\u003c/artifactId\u003e\n    \u003cversion\u003e4.9.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.alibaba\u003c/groupId\u003e\n    \u003cartifactId\u003efastjson\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.75\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.squareup.retrofit2\u003c/groupId\u003e\n    \u003cartifactId\u003econverter-gson\u003c/artifactId\u003e\n    \u003cversion\u003e2.9.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\u003e 本插件是基于retrofit来实现http请求，因此会用到一些java依赖，gradle包管理形式自行处理。\n\n* 编写测试\n```Java\npublic static void main(String[] args) {\nLoginReq loginReq = new LoginReq();\nloginReq.setUsername(\"zeromicro\");\nloginReq.setPassword(\"111111\");\nService service = Service.getInstance();\nservice.login(loginReq, new Callback\u003cVoid\u003e() {\n    public void onResponse(Call\u003cVoid\u003e call, Response\u003cVoid\u003e response) {\n        System.out.println(\"login success\");\n    }\n\n    public void onFailure(Call\u003cVoid\u003e call, Throwable throwable) {\n\n    }\n});\n\nRegisterReq registerReq=new RegisterReq();\nregisterReq.setUsername(\"zeromicro\");\nregisterReq.setPassword(\"1111\");\nregisterReq.setMobile(\"12311111111\");\nservice.register(registerReq, new Callback\u003cVoid\u003e() {\n    public void onResponse(Call\u003cVoid\u003e call, Response\u003cVoid\u003e response) {\n        System.out.println(\"register success\");\n    }\n\n    public void onFailure(Call\u003cVoid\u003e call, Throwable throwable) {\n\n    }\n});\n\nUserInfoReq infoReq = new UserInfoReq();\ninfoReq.setId(\"8888\");\nservice.getUserInfo(infoReq, new Callback\u003cUserInfoReply\u003e() {\n    public void onResponse(Call\u003cUserInfoReply\u003e call, Response\u003cUserInfoReply\u003e response) {\n        System.out.println(\"userInfo:\"+ JSON.toJSONString(response.body()));\n    }\n\n    public void onFailure(Call\u003cUserInfoReply\u003e call, Throwable throwable) {\n\n    }\n});\n\nUserSearchReq searchReq=new UserSearchReq();\nsearchReq.setKeyWord(\"song\");\nservice.searchUser(searchReq, new Callback\u003cUserInfoReply\u003e() {\n    public void onResponse(Call\u003cUserInfoReply\u003e call, Response\u003cUserInfoReply\u003e response) {\n        System.out.println(\"search:\"+JSON.toJSONString(response.body()));\n    }\n\n    public void onFailure(Call\u003cUserInfoReply\u003e call, Throwable throwable) {\n\n    }\n});\n```\n\n* 请求结果\n    * client log\n    ```text\n    register success\n    login success\n    search:{\"age\":20,\"birthday\":\"1991-01-01\",\"description\":\"coding now\",\"name\":\"zeromicro\",\"tag\":[\"Golang\",\"Android\"]}\n    userInfo:{\"age\":20,\"birthday\":\"1991-01-01\",\"description\":\"coding now\",\"name\":\"zeromicro\",\"tag\":[\"Golang\",\"Android\"]}\n    ```\n    \n    * server log\n    ```text\n    SearchUser: {KeyWord:song}\n    GetUserInfo: {Id:8888}\n    Login: {Username:zeromicro Password:111111}\n    Register: {Username:zeromicro Password:1111 Mobile:12311111111}\n    ```\n\n# 插件开发流程\n\n* 自定义参数\n    ```go\n    commands = []*cli.Command{\n        {\n            Name:   \"android\",\n            Usage:  \"generates http client for android\",\n            Action: action.Android,\n            Flags: []cli.Flag{\n                \u0026cli.StringFlag{\n                    Name:  \"package\",\n                    Usage: \"the package of android\",\n                },\n            },\n        },\n    }\n    ```\n\n* 获取goctl传递过来的json信息\n    * 利用goctl中提供的方法解析\n        ```go\n        plugin, err := plugin.NewPlugin()\n        if err != nil {\n            return err\n        }\n        ```\n  \n    * 或者自定义结构体去反序列化\n  \n        ```go\n        var plugin generate.Plugin\n        plugin.ParentPackage = pkg\n        err = json.Unmarshal(std, \u0026plugin)\n        if err != nil {\n            return err\n        }\n        ```\n\n* 实现插件逻辑\n    ```go\n    generate.Do(plugin)\n    ```\n\n\u003e说明：上述摘要代码来自goctl-android,完整信息可浏览源码。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeromicro%2Fgoctl-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeromicro%2Fgoctl-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeromicro%2Fgoctl-android/lists"}