用变量,之前需,先定义,该变量
一个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后面的文件夹中