今天突发奇想学习了一下go,这个被称“互联网下的C”果然和c一样快速简单(设计思想 一个问题尽量只有一个解决方法)
下面总结一些知识点:
1、go中有包的概念有一个执行入口main包 其中有main方法是执行的入口 如果没有main包 程序是无法执行的 同时建议把包名也就是文件夹的名字和打包的名字package xxx 一样比较好 (另外 源码都是放在src目录下)
2、go 的编译命令 : 就会生成同名的exe文件 如果要指定文件名和路径 加上-o xxx.exe
go build xxx.go ->.exe
go的代码格式化命令:
gofmt -w xxx.go 排版文件对齐格式化
3、变量声明:
var num int // 全局变量不可 num :=10
num = 10var num=10
//多变量声明
var s1,s2,s3 string //这里不能同时赋值 var s1,s2,s3 string="a" 错误
//正确
var n1,n2,n3 = "a",1,false
//全局变量多个变量声明方式
var(
e1 = 200
e2 = "200"
e4 =false
4、关于数据类型小结:
Int
[
int:取多少和系统有关
rune:== int32
int8:-128-128 (byte)
uint8 0-255]
5、go字符串由字节组成
address :="泮\n斌" //字符串不可便 会转义
address2 := `泮\n斌` //反引号 不转意
6、
//转换
//xxx->string
ssAge := fmt.Sprintf("%d",15)
num5 := 123
str := strconv.Itoa(num5) //整数转字符串
fmt.Println(str)
fmt.Println(ssAge)
iiAge := strconv.FormatInt(101,2) //base表示转化为2进制
fmt.Printf("%T %s\n",iiAge,iiAge)
f :=12.43
sf := strconv.FormatFloat(f,'f',4,64) //转成什么格式 保留几位
fmt.Println(sf)
//string ->xxx
sb :="10101"
var bb int64
bb, _ = strconv.ParseInt(sb,2,64) //base代表把要转换的看成2进制
fmt.Println(bb)
7、关于包的一些概念:
包中 如果首字母大写 可以被外部使用 小写则不可以
包引用: h "hello" //取别名 需要使用别名 否则报错
全局变量定义 --> init函数----> main 如何引入其他包 则先执行其他包的变量定义->init
//会在main之前
func init() {
fmt.Println("Init")
}
8、函数的一些概念:
defer fmt.Println("OK1") //最后执行
defer fmt.Println("OK2") //最后执行 定义的倒序执行
numbers := []int{1,5,7,9,13}
for i,j :=range numbers{
fmt.Println(i," ",j)
}
//将函数作为参数传递
func f2() string {
return "F2"
}
func f3(f2 func() string) {
fmt.Println(f2())
}
func f4(a int ,b int) {
fmt.Println(a+b)
}
func f44(f func(int,int), a int,b int) {
f(a,b)
return
}
//func(int,int)可以设置别名
type f4typename func(int,int)
func f44(f f4typename, a int,b int) {
f(a,b)
return
}
//支持可变参数 下面表示1到多个参数
func f5(one int,args...int) {
sum :=one
for i :=0; i<len(args); i++{
sum +=args[i]
}
fmt.Println(sum)
}
f5(1,2,3,4,4,6)
不支持函数重载
//匿名函数
b := func(a int,b int) int{
return a+b
}(1,2)
fmt.Println(b) //3
ff :=func(a int,b int) int{
return a+b
}
fmt.Println(ff(3,4))