golang基本知识

1. gopath和goroot区别

GOPATH和GOROOT是Go语言的两个重要环境变量,它们的主要区别在于GOPATH是工作空间,而GOROOT是Go的安装目录。以下是详细介绍:

GOPATH。它是一个工作空间,用于存放Go项目的代码和第三方依赖包。在Go语言中,所有的包都保存在GOPATH的src目录下。当使用go get下载包时,这些包会被下载到GOPATH的第一个路径下的src目录。当使用go install命令时,会在GOPATH中找到的包的路径下生成可执行文件。124
GOROOT。它是指Go的安装目录,类似于其他编程语言的JDK目录。在GOROOT中,通常包含了Go的标准库代码,如bindocsrc目录。bin目录中包含了Go的编译器和其他工具。
在使用Go语言时,通常需要设置这两个环境变量,以确保能够正确地编译和运行Go程序。

2. 无法下载github.com包

 go get github.com/jmoiron/sqlx
fatal: unable to access 'https://github.com/jmoiron/sqlx/': Failed to connect to github.com port 443 after 75032 ms: Couldn't connect to server
package github.com/jmoiron/sqlx: exit status 128

解决方法:
添加代理:
PS: 具体可参考 https://github.com/goproxy/goproxy.cn

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

注意⚠️ 不要在storm Trminal里面执行,要在终端执行

3. go get命令下载下来的包放在哪里了

go get:当使用 go get 安装包时,它将包下载到 GOPATH 中的 pkg/mod 目录。在这个目录中,Go Modules 将下载和缓存所有的依赖项。如果你安装的是二进制工具,它们将被放在 GOPATH 的 bin 目录中。

例如,如果你的 GOPATH 是 /home/user/go,并且你运行 go get github.com/example/mypackage,包将被下载到 /home/user/go/pkg/mod 目录,而可执行文件(如果有的话)将被放在 /home/user/go/bin 目录。

4. Go Mod模式

Go Modules 在 Go 1.11 和 Go 1.12 中有三个模式,根据环境变量 GO111MODULE进行配置:

默认模式(未设置该环境变量或 GO111MODULE=auto)
Go 编译器在同时满足以下两个条件时使用 Go Mod
当前目录不在 GOPATH/src/ 下;
在当前目录或上层目录中存在 go.mod 文件;
GOPATH 模式(GO111MODULE=off)
Go 编译器从不使用 Go Mod。而会查找 vendor 目录和 GOPATH 以查找依赖项。
Go Modules 模式( GO111MODULE=on)
Go 编译器只使用 Go Mod,GOPATH不再作为导入目录,但它还是会把下载的依赖储存在 GOPATH/pkg/mod 中,也会把 go install 命令的结果放在 GOPATH/bin 中。
Go 1.13 及1.13以后版本默认使用 Go Mod 模式

在非$GOPATH目录的任意地方创建一个文件夹,然后再终端执行 go mod init project_name进行初始化操作,成功之后会发现目录下会生产一个go.mod文件

go mod tidy

最后在配置golang编辑器,就可以了。

5. string底层实现

在 Go 语言中,字符串类型的底层实现是一个字节数组,长度为字符串的长度。因为字符串是不可变的,所以当需要对字符串进行修改时,实际上是通过新建一个字符串来代替原来的字符串,而不是修改原来的字符串内容。

package main

import "fmt"

// 反转字符串函数
func reverseString(s string) string {
    bytes := []rune(s)
    for i, j := 0, len(bytes)-1; i < j; i, j = i+1, j-1 {
        bytes[i], bytes[j] = bytes[j], bytes[i]
    }
    return string(bytes)
}

func main() {
    str := "Hello, World!"
    reversedStr := reverseString(str)
    fmt.Println("原始字符串:", str)
    fmt.Println("反转后的字符串:", reversedStr)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值