GO 踩坑入门篇

GO-口吐芬芳

最近有个项目要用socket做前后端交互, 看到 go websocket 居然支撑 单服务器100 0000 连接.内存不用1G. 它滴娘个腿~
对于我们这种用java 写个socket,发布到神龙服务器上开一百个线程就卡到飞起的三流程序员来说,天神有木有!!!

也算是老司机,不曾想有一天拔在这鬼坑里出不来.*** ,就不能简单暴力点?

开篇-环境-MAC

我的环境 mac,其它环境别往下看了,鬼知道你是什么问题!自己爬去,我都没爬出来还管球你!

下载

官网, 下载
我下的版本是 Apple MacOS / go1.14.darwin-amd64.pkg
一顿鼠标Next 之后, go 成功安装到 /usr/local/go

我一直坚信这**是我整个GO环节里最顺利的时刻

环境变量

因为 shell 环境用的 zsh, 确保 开机在命令行就可以用到 GO 命令 , PATH。这个跟其它系统、其它应用可执行文件一个意思,不嘚嘚。

没安装zsh 这里

启动台》其它》终端

code@MB ~ % vi ~/.bash_profile

export GOPATH=$HOME/go
export GOPROXY=https://goproxy.io
export GO111MODULE=auto
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH

> esc :wq  
# 如果有权限问题, 就 sudo vi ...
# 为了上面这堆环境变量我没少折腾 你照抄好了。

vi ~/.zshrc
source $HOME/.bash_profile

esc wq

> source ~/.zshrc  # 刷新整个配置,这个之后应该在什么位置都可以 go help
> go help 
> ...

IDE 编程工具

在 Visual Studio Code 如日中天的今天,其它都是垃圾!反正我写java、node、flutter什么乱七八糟的都用这个.
下载完成后在 Extensions 里搜 GO ,管它什么牛鬼蛇神,看着顺眼的都一通 install! 最少得装top两,当程序员打开任何界面不能空手点XX,横竖捞点。

然后
Code 》 Preferences 》Settings 》 User(作用域) 》 Extensions 》Go
Edit in settings.json, 下面这段复制进去. 重启 VS Code 一次。

"go.formatTool": "goimports",
"go.useLanguageServer": true,
"go.gocodeAutoBuild": true,
  "go.gopath": "/Users/codes/go",
  "[markdown]": {
    "editor.defaultFormatter": "yzhang.markdown-all-in-one"
  },
  "go.languageServerFlags": [
    "serve",
    "-rpc.trace",
    "--debug=localhost:6060",
 ]

自己看字面意思,懒得注释!
反正为了能正常编译,这几个配置翻了一堆网页,烧了我三杯速溶咖啡,个中艰辛尔等自行理解!鬼知道还有什么大坑,后面慢慢补充。

项目创建

相对于JAVA/maven,Node/NPM来说,GO的依赖管理不知道是什么goshi!总之第一感觉就是思路清奇、逻辑混乱。搞明白估计得不少时间。
有用文字能描述清楚的大神,请直接提交到这里,插香跪拜!
我们用官方提供的mod来管理依赖

创建了个目录。用来踩坑


> mkdir -p ~/git/projects/go/hello 
> cd ~/git/projects/go/hello  
> go mod init     

初始化mod管理依赖项目环境方式,跟环境变量里的 export GO111MODULE=auto 相关。
这里 有说明,但是我看完实操还是云里雾里。

VS Code》File》Open 上面创建的目录。

主命令文件

新建 main.go 》F5

package main

import (
    "io"
    "net/http"
    "os/exec"
)

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "hello this boll chat server! $9999")
}

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8000", nil)
    cmd := exec.Command("open", "http://localhost:8000")
    cmd.Output()
}

good luck !!!

你可能感兴趣的:(GO 踩坑入门篇)