{"id":116,"date":"2025-04-01T10:11:11","date_gmt":"2025-04-01T02:11:11","guid":{"rendered":"https:\/\/note.yuncrown.com\/?p=116"},"modified":"2025-04-07T19:41:50","modified_gmt":"2025-04-07T11:41:50","slug":"golang","status":"publish","type":"post","link":"https:\/\/note.yuncrown.com\/index.php\/2025\/04\/01\/golang\/","title":{"rendered":"golang"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>1.\u521b\u5efa\u9879\u76ee\u6587\u4ef6\u5939<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir gin_project\ncd gin_project<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.\u521d\u59cb\u5316 Go \u6a21\u5757<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5728 <span style=\"background-color: initial; font-family: inherit; font-size: inherit; color: initial;\">gin_project<\/span> \u76ee\u5f55\u4e0b\u8fd0\u884c\uff1a\ngo mod init gin_project\n\/\/ \u8fd9\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u521b\u5efa\u4e00\u4e2a <span style=\"background-color: initial; font-family: inherit; font-size: inherit; color: initial;\">go.mod<\/span> \u6587\u4ef6\uff0c\u7ba1\u7406 Go \u4f9d\u8d56\u9879\u3002<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.\u5b89\u88c5 Gin\uff08\u6307\u5b9a\u7248\u672c\uff09<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>go get github.com\/gin-gonic\/gin@v1.10.0\n\/\/\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f60\u53ef\u4ee5\u8fd0\u884c\uff1ago mod tidy \u6765\u6e05\u7406\u548c\u7ba1\u7406\u4f9d\u8d56\u9879\u3002\uff08\u4e0d\u8fd0\u884c\u597d\u50cf\u4e5f\u6ca1\u4ec0\u4e48\u95ee\u9898\uff09<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">4.\u521b\u5efamain.go\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e00\u4e0b\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n\t\"fmt\"\n\t\"github.com\/gin-gonic\/gin\"\n\t\"github.com\/spf13\/viper\"\n\t\"os\"\n\t\"scanMint\/Common\"\n\t\"scanMint\/Controller\"\n\t\"scanMint\/Cron\"\n\t\"scanMint\/Event\"\n\t\"scanMint\/Middleware\"\n)\n\nfunc main() {\n\tInitConfig()\n\tdb := Common.InitDB()\n\tdefer db.DB()\n\tr := gin.Default()\n\tr = CollectRouter(r)\n\tCron.Cron()\n\tport := viper.GetString(\"server.port\")\n\tif port != \"\" {\n\t\tr.Run(\":\" + port)\n\t}\n\tEvent.ListenEvent()\n\t\/\/r.Run(\"\") \/\/ \u76d1\u542c\u5e76\u5728 0.0.0.0:8080 \u4e0a\u542f\u52a8\u670d\u52a1\n}\n\nfunc InitConfig() {\n\tworkDir, _ := os.Getwd()\n\tviper.SetConfigName(\"setting\")\n\tviper.SetConfigType(\"yml\")\n\tviper.AddConfigPath(workDir)\n\terr := viper.ReadInConfig()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t}\n\tviper.WatchConfig()\n}\n\nfunc CollectRouter(r *gin.Engine) *gin.Engine {\n\tr.Use(Middleware.Cors())\n\tr.POST(\"\/api\/get_token_balance\", Middleware.IsRunning(), Controller.GetTokenBalance)          \/\/\u83b7\u53d6\u7528\u6237\u5f53\u524dLP\u6570\u91cf\n\tr.POST(\"\/api\/is_address_exist\", Middleware.IsRunning(), Controller.IsAddressExist)            \/\/\u67e5\u8be2\u5730\u5740\u662f\u5426\u5b58\u5728\n\tr.POST(\"\/api\/record_address\", Middleware.IsRunning(), Controller.RecordAddress)               \/\/\u4fdd\u5b58\u5730\u5740\n\tr.POST(\"\/api\/get_user_reward\", Middleware.IsRunning(), Controller.GetUserReward)              \/\/\u83b7\u53d6\u7528\u6237\u5f53\u524d\u672a\u63d0\u53d6\u6316\u77ff\u5956\u52b1\n\tr.POST(\"\/api\/admin_set_reward\", Middleware.IsRunning(), Controller.AdminSetReward)            \/\/\u7ba1\u7406\u5458\u5199\u5165\u6316\u77ff\u5956\u52b1\u63a5\u53e3\n\tr.POST(\"\/api\/get_user_share_reward\", Middleware.IsRunning(), Controller.GetUserShareReward)   \/\/\u83b7\u53d6\u7528\u6237\u5f53\u524d\u672a\u63d0\u53d6\u5206\u4eab\u5956\u52b1\n\tr.POST(\"\/api\/admin_set_share_reward\", Middleware.IsRunning(), Controller.AdminSetShareReward) \/\/\u7ba1\u7406\u5458\u5199\u5165\u5206\u4eab\u5956\u52b1\u63a5\u53e3\n\tr.POST(\"\/api\/get_user_node_reward\", Middleware.IsRunning(), Controller.GetUseNodeReward)      \/\/\u83b7\u53d6\u7528\u6237\u5f53\u524d\u672a\u63d0\u53d6\u8282\u70b9\u5956\u52b1\n\tr.POST(\"\/api\/admin_set_node_reward\", Middleware.IsRunning(), Controller.AdminSetNodeReward)   \/\/\u7ba1\u7406\u5458\u5199\u5165\u5206\u4eab\u8282\u70b9\u63a5\u53e3\n\n\tr.POST(\"\/api\/get_node_address\", Middleware.IsRunning(), Controller.GetNodeAddress) \/\/\u83b7\u53d6\u8282\u70b9\u5730\u5740\u5217\u8868\u63a5\u53e3\n\n\t\/\/\u5de5\u5177\u7c7b\n\tr.POST(\"\/api\/get_empty_data\", Middleware.IsRunning(), Controller.GetEmptyData)           \/\/\n\tr.POST(\"\/api\/insert_reward_tool\", Middleware.IsRunning(), Controller.InsertRewardTool)   \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/count_reward\", Middleware.IsRunning(), Controller.CountReward)              \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/count_bigInt\", Middleware.IsRunning(), Controller.CountBigInt)              \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/set_reward\", Middleware.IsRunning(), Controller.SetReward)                  \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/balance_is_maintain\", Middleware.IsRunning(), Controller.BalanceIsMaintain) \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/get_all_rewards\", Middleware.IsRunning(), Controller.GetAllRewards)         \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/get_all_withdraw\", Middleware.IsRunning(), Controller.GetAllWithdraw)       \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\tr.POST(\"\/api\/get_user_all_reward\", Middleware.IsRunning(), Controller.GetUserAllReward)  \/\/\u83b7\u53d6\u6628\u5929\u5408\u7ea6\u589e\u957f\u4f59\u989d\n\treturn r\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br>5.go\u9879\u76ee\u6253\u5305linux\u4e8c\u8fdb\u5236\u6587\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ linux\uff08-o myapp\uff1a\u6307\u5b9a\u751f\u6210\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u540d\u4e3amyapp\uff09\n\/\/ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o createToken main.go\n\/\/ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o createLiquility main.go\n\/\/ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o fundingRecord main.go\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go\n\/\/ windows exe\nCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">6.\u6253\u5305abi\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ --abi abi.json \u4e3a\u6211\u4eec\u8981\u901a\u8fc7abigen\u751f\u6210go\u6587\u4ef6\u7684 \u6e90\u6587\u4ef6\u8def\u5f84\n\/\/ --pkg main \u4e3a\u6211\u4eec\u8981\u751f\u6210go\u6587\u4ef6\u91cc\u9762\u7684\u5305\u540d\uff08\u751f\u6210\u7684go\u6587\u4ef6\u7b2c\u4e00\u884c\u4ee3\u7801 \u5982\uff1apackage main\uff09\n\/\/ --type Token \u4e3a\u6211\u4eec\u751f\u6210go\u6587\u4ef6\u91cc\u53ef\u64cd\u4f5c\u5bf9\u8c61\/\u65b9\u6cd5\/\u53d8\u91cf\u7684\u7ec4\u6210\u90e8\u5206\uff0c\n\/\/ \u4e0d\u5199\u9ed8\u8ba4\u662f\u5305\u540d\uff0c\u4f7f\u7528\u5c31\u662finstance, err := Abi.NewAbi(mintAddress, client)\n\/\/ \u8fd9\u91cc\u5199\u662fToken\uff0c\u4f7f\u7528\u5c31\u662finstance, err := Abi.NewToken(mintAddress, client)\n\nabigen --abi=token.abi --pkg=Abi --type=Token --out=token.go<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u4ed6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u9879\u76ee\u5f00\u542f\u6a21\u5757\u652f\u6301\uff1a\ngo env -w GO111MODULE=on\n\n\/\/ goland\u65e0\u6cd5\u89e3\u6790\u76ee\u5f55\uff1a\n\/\/ \u5173\u95ed\u9879\u76ee\uff0c\u5220\u9664\u9879\u76ee\u76ee\u5f55\u91cc\u7684.idea\u6587\u4ef6\u5939\uff0c\u91cd\u65b0\u6253\u5f00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">golang\u7248\u672c\u7ba1\u7406\u5668g\u7684\u4f7f\u7528\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u67e5\u770b\u5f53\u524d\u53ef\u4f9b\u5b89\u88c5\u7684stable\u72b6\u6001\u7684go\u7248\u672c\ng ls-remote stable\n\/\/ \u5b89\u88c5\u6307\u5b9a\u7248\u672c\u7684go\ng install 1.23.7\n\/\/\u5207\u6362\u5230\u6307\u5b9ago\u7248\u672c\ng use 1.23.7<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1.\u521b\u5efa\u9879\u76ee\u6587\u4ef6\u5939 2.\u521d\u59cb\u5316 Go \u6a21\u5757 3.\u5b89\u88c5 Gin\uff08\u6307\u5b9a\u7248\u672c\uff09 4.\u521b\u5efamain.go\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e00\u4e0b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,17],"tags":[],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-gin","category-golang"],"_links":{"self":[{"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":10,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":132,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions\/132"}],"wp:attachment":[{"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/note.yuncrown.com\/index.php\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}