go语言学习笔记1

吉祥物:金花鼠

官网:: golang.org

云计算应用:CDN(内容分发网络),访问网址加载视频速度很快

go语言特点:机能达到静态语言的安全和性能(c语言),也达到动态语言的开发维护效率(python)

go语言包的概念:每个文件都属于一个包,main函数必须在main包

go语言引入垃圾回收机制:内存自动回收,不需要开发人员关注

go语言天然并发:goroutine,轻量级线程

go语言开发工具:VSCode,sublime,vim,Emacs

SDK:软件开发工具包    下载地址:golong.org

验证SDK安装成功:

运行方式:

  1. go build main.go编译后生成main.exe,然后直接输入main.exe执行,可以指定编译文件的名字go build -o mymain.exe main.go
  2. go run main.go 直接运行

 

go注意事项:如果go定义的变量,import的包没用到不会编译通过

go注释方式:行注释//,块注释/* */  快捷键 Ctrl+/

go缩进:tab整体向右移动,shift+tab整体向左移动

格式化:> gofmt main.go会在控制台显示格式化后的代码,

              > gofmt -w main.go 将格式化后的内容在重置到原文件

go每行最长80字符,println代码里换行","   若想在控制台输出换行用\n

 

Dos命令

我们在控制台输入指令发给dos服务器,服务器在Windows里执行相应操作

查看当前目录:dir

回到根目录:cd \

创建目录:md project1 project2

删除空目录:rd project1

删除多级目录:rd /q/s project1 (/q:带询问)

创建文件:echo hello world > abc.txt

复制文件(使用原文件名):copy abc.txt d:\tmp

复制文件(重新命名):copy abc.txt d:\tmp\hello.txt

移动文件:move abc.txt f:\tmp

删除文件:del abc.txt

清屏:cls

退出:exit

 

go变量

  1. var i int        先定义不赋值,默认值为0
  2. var num = 10.5            根据值自动判定类型
  3. str := "tom"                不用var定义,但需要用:=,等价于var name string    name = “tom”
  4. var n1,n2,n3 int        支持同时定义多个
  5. var a,b,c = 100, "tom",300        支持同时赋值多个变量

全局变量:在函数之外定义的变量

var (
    a = 100
    b = "necy"
    c = 300
)

 

 

go数据类型

  1. 数值型:int,int32,int64 (rune是int32的别名,代表字符的Unicode编码)
  2. 浮点型:float32,float64
  3. 布尔型:bool
  4. 字符串型:string,rune,byte(byte操作的对象是字节切片,与string的不可变不同,byte是可变的)

 

go数据类型转换


1. string到int
     int, _ = strconv.Atoi(string)


2. string到int64
    int64, _ = strconv.ParseInt(string, 10, 64)  转换后10进制,转换后int64


3. int到string
    string = strconv.Itoa(int)

    string = fmt.Sprintf("%d", num)    第一个参数的类型根据第二个参数类型而定


4. int64到string
string = strconv.FormatInt(int64,10)   10进制

5. 如果string="hello",转换后的标准数据类型是0/false

6.以原生字符串的形式输出(反引号)

go指针

  1. 基本数据类型,变量存的就是值,也叫值类型
  2. 获取变量的地址用&,比如 var num int   num的地址:&num
  3. 指针类型,指针变量存的是地址,var ptr *int = &num

ptr输出:0xc04204e080

&ptr输出:0xc04206c020

*ptr输出:10

 

值类型:int系列,float系列,bool,string,数组,struct

引用类型:指针,slice切片,map,管道,interface

 

Tips

  • 变量名,包名,函数名建议使用驼峰法,getName(), setName()
  • 引入其他包,从src的下一级开始
  • 变量名首字母大写代表可以被其他的包引用,首字母小写代表不可以被其他的包引用

 

算术运算

  • 如果运算的都是整数,不管return的接收类型得到的结果也是整数
  • i++或i-- 只能独立使用, a = i ++不可以,必须分成2句,i++,a = i
  • ++i或--i 在go中没有
  • &&当第一个条件为false,放弃判断第二个
  • || 当第一个条件为true,放弃判断第二个

go获取键盘输入

  1. 导入fmt包
  2. fmt.scanf("%s %d", &name, &age)
  3. fmt.scanln(&name)
  4. 后台通过name拿到前台输入的值

go分支结构

  • 可以在if分支先定义再判断

  • switch后面的值key可以是常量,变量,表达式,有返回值的函数
  • 如果key和a都是变量,那数据类型必须保持一致

 

  • case后面可以加多个常量或表达式case key == 20: 

switch穿透,会继续向下执行一个case,但只能穿透一层

  • for循环的2种实现
for i := 1; i < 10; i++ {
    fmt.Println("123")
}
i:=1
for i < 10 {
    fmt.Println("123")
    i++
}
  • for循环遍历字符串
name = "amber"
for index,val := range name {
    fmt.Println("index=%d, value=%c", index, val)
}
  • do while实现循环
var i:= 1
for{
    fmt.Println("hello world!")
    i++
    if i > 10 {
        break
    }
}
  • 使用for-range来遍历,即使有中文也可以

 

 

  • 随机数rand要设置一个种子,否则得到的值永远是固定的
import(
    "fmt"
    "math/rand"
)
fmt main{
    rand.Seed(time.Now())
    n := rand.Intn(100)
    fmt.Println(n)
}
  • break可以通过标签跳出到指定位置,默认跳出最近的for循环
fmt.main(){
    label1:
    for i = 0; i < 4; i++ {
        label2:
        for j = 0; j < 5; j++ {
            if j==2{
                break label1
            }
        }
        fmt.Println("j=", j)
    }
}

* break label1是跳出第一个for循环

 

goto使用

 直接跳到label指定的内容,不推荐使用

fmt main {
    var num = 10
    if n > 10 {
        goto label1
    }
    fmt.Println("ok1")
    fmt.Println("ok2")
    fmt.Println("ok3")
    label1:
    fmt.Println("ok4")
    fmt.Println("ok5")
}

 

go函数

定义:为完成特定功能的集合

fun 函数名(形参)(返回值类型){

     return  返回值列表

}

fun cal(n1 float64, n2 float64, operator byte) float64 {
    var res float64
    switch operator {
        case '+':
            res = n1 + n2
        case '-':
            res = n1 - n2
        default:
            fmt.Println("操作符错误")

    }
    return res
}
  • init函数

如果一个文件同时包含全局变量,init函数,main函数,执行的顺序是: 全局变量 > init函数 > main函数

  • 匿名函数 :在定义时直接调用

  • 全局匿名函数 

 

 

go引入包

  • 被引入的包的函数或变量首字母必须大写(大写认为是公有,小写是私有

 

defer函数

输出的结果:

string常用命令

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值