go学习记录 day1

局部变量的声明

//1
var a int
a = 100
// 2
var b int = 100
// 3
var c = 100
// 4
d := 100

全局变量声明

  • 全局变量声明只能使用1,2,3方法,方法4只能用于局部变量声明

常量和iota

  • 在变量前加const
const b int = 10
const(
    a = iota
    b
    c
    d
)
fmt.Println(a,b,c,d)
#打印结果为0123
  • iota实现自增(从0开始)

返回值

func f1(a string,b int){} //返回空值
func f2(a string,b int) int{} //返回int 
func f3(a string,b int) (int,int){} //返回两个值
func f4(a string,b int) (c int,d int){
    c,_= strconv.Atoi(a)
    d = b
    return
} //返回两个值
func f5(a string,b int) (c,d int){}//同f4

init函数

  • init函数会优先于main函数加载
  • go模块中要导出的函数,必须首字母大写

import导入的问题

  • 导入某个包并不使用会编译出错(解决办法在包前加_可以导入并调用包的初始化函数)
import _ "lib1" 
import mylib "lib2" //包的别名 
import . "lib3" // 可以直接使用包的函数 而不需要 lib3.func

指针

  • 和c相同(简单理解为递归引用)

defer

  • defer在本结构体最后调用(多个defer是栈形式调用)
defer fmt.Println("a")
defer fmt.Println("b")
fmt.Println("c")
//执行结果为 c b a
  • defer执行在return之后

数组

  • 固定数组传递是形参
  • 切片数组传递的是指针
myArray := [10]int{1,2,3,4} // 值为 1234000000
myArray1 := []int
  • 切片元素追加使用append函数并需要重新赋值
//切片的定义方式
var a []int //空的切片长度0 使用a[0]会发生错误
a = make([]int,3) //将定义长度为3的切片并赋值给a
var a []int = make([]int,3) //定义长度为3,初始值为0的切片
a := []int{1,2,3,4} //初始化为长度为4的切片值为1,2,3,4
a := make([]int,3) //定义长度为3的切片 初始值为0
  • 切片的增加和截取和python类似
  • 切片增加一个值分配的空间将会翻倍(加入将长度为3的切片增加1,切片分配的空间就会变为6在)
var a []int = make([]int,3,5)
a = append(a,1) // len(a) = 4 cap(a) = 5 a = 0,0,0,1
a = append(a,2) // len(a) = 5 cap(a) = 5 a = 0,0,0,1,2
a = append(a,3) // len(a) = 6 cap(a) = 10 a = 0,0,0,1,2,3
b := a[0:2]
b[0] = 100 // a[0]的值同时也变为100
  • 切片赋值是一种指针引用(和python不同,python切片后是一个新的内存地址)
a = [1,2,3]
b = a[:2]
id(a[0]) #140728637379616
id(b[0]) #140728637382784
  • 使用copy会将切片复制到新的内存地址
a:=[]int{1,2,3,4}
b:=make([int],4)
copy(b,a)
a[0] = 100 //此时b[0]值还是为1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值