go基础学习
用变量,之前需,先定义,该变量
 一个go语言接口的模型:https://gitee.com/goku_black/go-gin-struct-test/blob/master/main.go
1、a++和++a区别?
 a++是先进行取值,后进行自增。++a是先进行自增,后进行取值
2、声明变量(三种方式)/常量
 1、//类型相同多个变量, 非全局变量
 var vname1, vname2, vname3 type
 vname1, vname2, vname3 = v1, v2, v3
 var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断
 vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
 2、常量命名方法:const LENGTH int = 10
 只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
 iota,特殊常量,可以认为是一个可以被编译器修改的常量
3、函数返回值/运算符
 函数返回多值用(空白符""可以不用使用返回值)
 eg:,a,b = main() 只需用a,b两个值
 1、逻辑运算符
 &&:(A && B) 为 False;逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。
 ||:(A || B) 为 True;逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。
 !:!(A && B) 为 True;逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。
右移运算符 ,const b=16; a = b >> 3 即 a = 16>>3 即 a = 16/(2的3次方) 即a = 16/8 即 a=2
<< 左移运算符 ,将除法变成乘法即可
2、位运算符
https://www.runoob.com/go/go-operators.html
4、switch/select/break/contiune/goto
 1、如果想要执行多个 case,需要使用 fallthrough 关键字,也可用 break 终止。
 switch{
 case 1:
 …
 if(…){
 break
 }
 fallthrough // 此时switch(1)会执行case1和case2,但是如果满足if条件,则只执行case1
 case 2:
 …
 case 3:
 }
 2、select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
 3、break/contiune,和python一样的作用
 4、goto 语句可以无条件地转移到过程中指定的行。
5、引用传递/指针传递变量的存储地址
 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
 /* 定义交换值函数*/
 func swap(x *int, y *int) {
 var temp int
 temp = x / 保持 x 地址上的值 */
 *x = y / 将 y 值赋给 x */
 y = temp / 将 temp 值赋给 y */
 }
2、
 var i int = 20
 var c *int
 需要用&来接,即c = &i
 fmt.Printf(*c) 打印出来为结果20
 fmt.Printf? 打印出来为地址20818a220
6、函数做为另一个函数的参数/闭包/函数方法
 package main
 import (
 “fmt”
 )
 /* 定义结构体 */
 type Circle struct {
 radius float64
 }
 func main() {
 var c1 Circle
 c1.radius = 10.00
 fmt.Println("圆的面积 = ", c1.getArea())
 }
 //该 method 属于 Circle 类型对象中的方法
 func (c Circle) getArea() float64 {
 //c.radius 即为 Circle 类型对象中的属性
 return 3.14 * c.radius * c.radius
 }
7、指针
 1、Printf和Println
 Printf是需要添加输出值的类型,Println不需要,直接就可以输出
 2、指针为空判断
 if(ptr == nil)
 3、还有二级指针: **pptr
 4、go向函数传递指针参数,通过引用或地址传参,在函数调用时可以改变其值
8、切片/删除/添加
 长度:len(),cap():可以测量切片最长可以达到多少
 append():aList = append(aList, 90) 集合的添加是:aTestMap[“like”] = “sajiao”
 delete() :delete(aTestMap, “hobby”)
9、接口
 写接口函数的时候,接口函数是没有函数名的
 fmt.Sprintf为一个拼接语句
 number1 := 1
 strFormat :=  number1:%d
 fmt.Sprintf(strFormat, number1)
10、并发go/通道channel
 go 函数名( 参数列表 )
 x := <- y
 通道缓冲:
 ch := make(chan string, 2)
 ch <- “aaaaaaa”
 fmt.Println(<-ch)
 fmt.Println(ch) //仅获取物理地址
11、下载无效时:go get
 1、首先根据提示建好环境变量后再建项目
 
2、只需要在命令行中执行,解决:failed to receive handshake, SSL/TLS connection failed
 git config --global --unset http.proxy
 git config --global --unset https.proxy
3、windows
 $ go env -w GO111MODULE=on
 $ go env -w GOPROXY=https://goproxy.cn,direct
 macOS 或 Linux
 $ export GO111MODULE=on
 $ export GOPROXY=https://goproxy.cn
12、安装gin
 cd到对应的文件夹下面,再克隆;如果没有文件夹就自行创建一个
 git clone https://github.com/go-playground/locales.git
 git clone https://github.com/mattn/go-isatty.git
 git clone https://github.com/ugorji/go.git
 git clone https://github.com/go-playground/validator
 git clone https://github.com/gin-contrib/sse
 git clone https://github.com/mattn/go-isatty
 cd到该(golang.org)文件夹下
 git clone https://github.com/golang/sync.git
 git clone https://github.com/golang/crypto.git
 git clone https://github.com/golang/sys.git
 git clone https://github.com/golang/net.git
 git clone https://github.com/golang/text.git
 google.golang.org文件夹下的
 git clone https://github.com/protocolbuffers/protobuf-go
13、两种环境配置方式对比:
 go mod init xxx.py
 go mod verify
 
 
14、package 报错
 package awesomeProject is not in GOROOT (/usr/local/go/src/awesomeProject)
 出现类似的错误,将自己的项目复制到GOROOT后面的文件夹中
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!