Go的三个主流开发框架 | 青训营笔记

491 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 3 天

GORM

这种写法是什么意思map[string]interface{}

显而易见,这是个字典,但为什么后面是一个接口呢?其实,后面表示的不是接口,而是一个接口值,而在go中,接口值并不是强类型,而你初次见到这个的用法的时候,应该是类似于下面的情况

db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)

从上面可以看到,值得位置可以是字符串还可以是整形

如何在wsl2中安装Kitex

遇到“E505:“/usr/bin/yum“ is read-only(add !to override)”问题怎么解决

1.首先要强制退出

:q!

2.退出后再执行

:sudo !!

3.再次编辑内容

vim ......

4.最后保存即可

:wq!

Kitex

关于这个错误怎么解决parse echo.thrift err: parse error near CarriageReturnLineFeed (line 2 symbol 0 - line 2 symbol 1): "\n"

这个错误八成是因为你在复制黏贴掘金之类的网站的时候,因为程序员比较捞,复制的内容里存在看不见的字符,只要别用记事本,都能看见,删掉就好

这个错误怎么解决can only use path@version syntax with 'go get' go install

这个是因为你版本太低了导致的估计,我用1.13版的时候遇到的这个错误,但用1.18版就没有了

这个错误怎么解决go: github.com/cloudwego/kitex/tool/cmd/kitex@latest: module github.com/cloudwego/kitex/tool/cmd/kitex: Get "proxy.golang.org/github.com/…": dial tcp 172.217.160.81:443: connect: connection refused

这个错误其实就是你网络太慢了,导致一直访问失败估计,可以按照下面的方法添加代理

vim /etc/profile

然后在文件中加入

export GOPROXY=https://goproxy.cn

如何更新go

先卸载

whereis go

然后删除所有出现的go文件

然后按如下步骤下载

  • 1.下载Go发行版

从官方地址:golang.org/dl/ 上下载合适的 二进制发行版 (例如: go1.10.4.linux-amd64.tar.gz ):

wget https://dl.google.com/go/go1.18.4.linux-amd64.tar.gz
  • 2.提取压缩包

提取压缩包到合适的目录(例如: /usr/local ):

sudo tar -xzf go1.18.linux-amd64.tar.gz -C /usr/local
  • 3.设置路径
sudo vim /etc/profile

在配置文件中加入

export PATH=$PATH:$GOPATH/bin
export GOPATH=/home/gopath

让配置生效

source /etc/profile

可以运行如下命令,验证是否安装成功:

go version

正常输出则说明安装成功,同时可以检查版本是否安装正确。

如何从wsl1升级到wsl2

  • 如何查看自己的版本

    wsl -l -v
    

    如果version处是1,说明是wsl1,显示2则是wsl2

  • 下载升级包

    wslstorestorage.blob.core.windows.net/wslblob/wsl…

    下载完成powershell

    wsl -l -v
    

    找到自己要升级的版本然后仿照下面执行

    wsl --set-version Ubuntu-20.04 2
    

为什么命令行调用kitex一直显示没有该命令

八成是没有配置path路径,导致找不到该命令,仿照下面进行修改

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPATH=~/gopath

用kitex -module exmaple -service example echo.thrift得到的工程不全

这是我在调用sh bulid.sh生成项目的时候遇到的一部分报错信息

../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:63:14: not enough arguments in call to iprot.ReadStructBegin have () want (context.Context) ../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:68:34: not enough arguments in call to iprot.ReadFieldBegin have () want (context.Context) ../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:83:25: not enough arguments in call to iprot.Skip have ("github.com/apache/thrift/lib/go/thrift".TType) want (context.Context, "github.com/apache/thrift/lib/go/thrift".TType) ../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:93:25: not enough arguments in call to iprot.Skip have ("github.com/apache/thrift/lib/go/thrift".TType) want (context.Context, "github.com/apache/thrift/lib/go/thrift".TType) ../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:98:24: not enough arguments in call to iprot.Skip have ("github.com/apache/thrift/lib/go/thrift".TType) want (context.Context, "github.com/apache/thrift/lib/go/thrift".TType) ../../gopath/pkg/mod/github.com/cloudwego/kitex@v0.4.4/pkg/generic/thrift/base.go:103:12: not enough arguments in call to iprot.ReadFieldEnd have () want (context.Context)

这是我的example.thrift设置

namespace go api 
struct Request {
  1: string message
}
struct Response {
  1: string message
}
service Echo {
    Response echo(1: Request req)
}

这是我的handler.go的代码

package main

import (
        "context"
        api "example/kitex_gen/api"
)

// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}

// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
        // TODO: Your code here...
        return &api.Response{Message: req.Message}, nil
}

这是当前的go.mod设置

module example

go 1.16

require (
        github.com/apache/thrift v0.17.0
        github.com/cloudwego/kitex v0.4.4
)

我运行的平台是wsl2,Linux版本是Ubuntu-20.04

解决办法,在工程下输入下面的指令go get github.com/apache/thrift@v0.13.0

怎么一次直接获取全部依赖包

用下面的指令

go mod tidy

Hertz

遇到这个错误怎么办output directory /home/cjz/workplace/hertz_demo is not under GOPATH/src. Please specify a module name with the '-module' flag

首先go.mod记得写一下,然后按照下面的的来

hz new -module hertz_demo

如果碰到配置不能用的情况,该怎么办

试一下

source /etc/profile

不管有没有更改配置文件,都可以试一下