GO基础学习

1:小问题

1:内存不足会把进程给杀掉

2:go build -o 指定目录(默认go path下,最好放到bin目录下) 编译文件的目录( path下面的src找文件,src需要省略)

3:问题出现在哪里?

package add

var Name string

Name = hello

编译型语音,执行必须要有入口,这个变量赋值不在函数里面,也没有入口,所以找不到,编译就会报错,可以放到一个函数里,在main里面调用,或者声明就初始化(推荐)

var Name int = 100

func init(){

Name = 10

}

最终还是10(全局变量先执行

4:main->add->test

执行test->add->main

全局变量是和包对应的,所以都是Name不会覆盖

2:基本类型学习

1:关键字:

const,break,else,switch,fallthough,chan,map,if,type,go....

2:别名:

import = a learn/add

3:init

mian执行之前会调用init函数

4:const

只读的,编译初始化后值就确定了,只能修饰bool,num(int,float,complex),string

const a string = qqq || const a = string

a=0,后面自动+1

const (

a = iota

   b

   c

)

5:变量

1:批量定义

var(

a int

b int = 5

c = 5

)

2:引用-栈与堆

引用类型:指针,slice,map,chan

值类型:栈分配

引用类型:堆分配

一个函数比如定义 var a = 1 调add函数,add(a) 开始函数会存放在栈中做一个现场保护,后面会新开一个栈,栈先进后出,go里面一个栈最大就几k。栈是一种数据结构很高效。函数结束内存就会回收,除非出现内存泄露。

堆每个线程都可以使用,所以必然有加锁解锁过程,所以效率较低。需要垃圾回收GC

例题:交换a,b值。

a:=1

b:=2

swap(&a, &b)

如果函数里面只交换地址可以吗

a, b = b, a

不可以,因为ab是外面地址的复制,交换地址只是交换了函数内参数的地址,外面的地址没有改变

3:变量的作用域

函数内部,局部变量,作用函数内

函数外,全局变量,作用于整个函数,首字母大写,可以被外面的包使用

一个语句块里面的变量也是只适用于这个语句块的

例题:答案:G,O,G。如果是a= o 就是G,O,O

int32 是32位,一个字节8位,所以是4个字节

6:数据类型和操作符

生成随机数:种子如果设置的固定的,每次函数重新运行都会得到和上一次相同的序列

rand.Seed(time.Now().Unix()) //rand.Seed(10) for i := 0; i < 10; i++ { a := rand.Intn(100) fmt.Println( 第%d个随机数 , i, a) }

字符:byte

反引号内的内容,不会做转义

1:print:

%v :原样打印,比如byte a := 'a' 就是97

%#v:相应GO的语法表示

%T:打印类型

3:函数

1:函数类型

函数也是一种类型,可以赋值给变量,参数传递,函数不能比较

2:可变参数:

func add(arg... int) int{} 0个或多个参数

len(arg)就是参数长度

arg[0]第一个参数

3:defer

1:多个defer先进后出顺序执行(放到栈里)

2:defer的变量在声明时参数就确定了

i:=0

defer fmt.Println(i)//0

i++

资源关闭,锁释放

4:匿名函数

defer func(){

fmt.Println(1)

}()

匿名函数为什么后面有个括号,我之前一直不理解,假设是有名字

那就是 func aaa(){} 调用就是aaa()

所以去掉aaa就简化成了</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值