go语言

1.go语言介绍

2.开发环境搭建

3.我的第一个hello world

4.变量的定义

5.变量类型

6.常量

7.函数基础

8.函数一定是公民(先了解一下的)

 

 

一.go语言介绍

go是什么:

Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。
Go是静态强类型语言,是区别于解析型语言的编译型语言。

解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。
编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。

go语言的特性:

跨平台的编译型语言
语法接近C语言
管道(channel),切片(slice),并发(routine)
有垃圾回收的机制
支持面向对象和面向过程的编程模式

 

go语言介绍:
python,php,js
c,c+,c#:微软,java:sun公司,后来被甲骨文收购了,go:谷歌
go语言发展:Google
2019年11月出的,python:1989年 java:1990
Go是静态强类型语言:强类型:类型固定
那么go语言为什么这么火?
    docker容器化 devops比较火
    k8s go写的:容器编排
    区块链:第一个开源的区块链项目是用go写的
    性能高,特别适合服务端开发
    部署容易

补充跨平台的编译型语言:
c开发:在windows上开发,编译好的只能在windows上用
java横空出世:跨平台,一处编码到处运行
    运行在java虚拟机之上
    编译成字节码文件:中间态
go:跨平台编译
    在windows平台可以编译出linux下的可执行文件

以下是补充内容:
1.定义在函数内部,对外部作用域有引用 2.编译型: 不依赖语言环境运行
解释型: 需要解释器,缺点是执行速度慢 python,js c,java,go
3.比特位: 8bit = 1bytes( b) 1024b = 1kb 1024b = 1m 1024m = 1g

 

二.开发环境搭建

开发环境搭建:
go开发环境:gol.13.5.windows-amd64
下载地址:https://golang.google.cn/dl/
安装完以后可以在cmd里面输入go version 查看go版本
环境变量会自动配置的
go env 配置得到环境变量代表着什么意思:
  GOPATH = C:\User\oldboy\go go的代码必须放这个路径下,你要是不放的话需要改路径
  GOROOT = c:\go go的安装路径
  
go ide: goland-2019.3.exe

补充:
  主流的ide(集成开发工具)
    pycharm
    idea/my eclipse:java web,收费 /eclipse:免费
    goland
    vs code:开发java,微软出的
    datagrip:数据库操作相关
    jetbrains 全家桶,他把市面上所有的编程语言的开发工具都写了一遍 (推荐都是用这个,因为开发工具都是用一套的,使用起来差不多)

 

三.我的第一个hello world

因为goland是编译型语言,如果先编译在执行,该怎么写,如果想把代码给别人的话,可以直接把编译好得到可执行文件给别人
在黑终端上:
    go build 文件名     这是编译
    文件名执行
编译并执行:因为开开发阶段,不需要生成文件给别人
go run s1.go

在go的开发者工具上就不需要了,可以直接鼠标右键run执行

// 单行注释
/*
多行注释
多行注释
    */
package main // 表示当前go文件属于main包
import "fmt" // 导入fmt包

// 编译型语言需要有一个入口文件,main包下的main函数
func main(){ // 定义了一个main函数
    fmt.Println("hello word") // 打印hello word
}

 

 

四.变量的定义

总结:

// 定义变量 有三种方式
    // 注意:在go语言中定义的变量必须使用,不然会报错
        //var关键字 变量名 变量类型 =//方式一:全名称
        var a int=10
    
        // 方式二:类型推导,就是会自动预判你的变量类型
        var a = 10

        // 方式三:简易方式
        a:=10   比较常用的

注意:
1.变量一定不能重复定义
2.值的类型固定住了,就不能改了比如说我 var a = 10  这就是int类型,就不能用 a= "zy"字符串了。
3.定义不赋初值 :int 类型默认值是0  string类型默认值是空字符串
4.同时定义多个变量可以这样写:var a,b = 10,"zy"  记住要用双引号

 

// 变量
package main // 表示是main包
import "fmt"

func main() {
    // 定义变量 有三种方式
    // 注意:在go语言中定义的变量必须使用,不然会报错
    //方式一:全名称
    //var关键字 变量名 变量类型 = 值
    var a int=10  //定义一个init类型的变量a,把10赋值给他
    fmt.Println(a)
    // 方式二:类型推导,就是会自动预判你的变量类型
    var a = 10
    fmt.Println(a)
    // 方式三:简易方式
    a:= 10
    fmt.Println(a)
    // 变量不能重复定义
    var a int = 10
    a:= 10  // 变量重复了
    fmt.Println(a)
    fmt.Println(a)
    // 强类型语言 ,就是类型固定就不能改了
    var a = 10
    a = 100
    //a = "zy" // 因为在初始阶段已经推导为int类型,所以就不能改变了
    b:="zy" // 可以这么写,重新定义一个变量
    fmt.Println(a)
    fmt.Println(b)
    // 定义不赋初值 :int 类型默认值是0  string类型默认值是空字符串
    var a int
    fmt.Println(a)
    var b string
    b = "zy"
    fmt.Println(b)
    // 同时定义多个变量
    var a = 10
    var b = 100 // 这样写太麻烦了
    var a,b int=10,20
    fmt.Println(a)
    fmt.Println(b)
    var a,b =10,"zy" // 注意这里必须使用双引号
    fmt.Println(a)
    fmt.Println(b)
    // 这种了解就可以了
    var(
        name = "zy"
        age = 29
        height int
    )
    fmt.Println(name)
    fmt.Println(age)
    fmt.Println(height)


}

 

五.变量类型

补充:

    /*
        int类型:表示整数,int8   int16  int32  int64
        计算机最小计量单位:bit位  int8 是 8个比特位=1个字节,表示的范围是:正负2的7次方减1
        在32位机器上int 就是int32 ,在64位机器上int就是int64
        uint类型:表示正整数 uint8 uint16...
        float类型:表示小数只有float32和float64
        complex64类型:复数
        byte: uint8的别名
        rune:int32的别名
    *

 

//变量类型
package main

import "fmt"

func main() {
    // bool类型 0值是false
    var b bool = true
    var b = true
    b:=true
    var b bool  // 0值就是false
    fmt.Println(b)

    // int 类型
    var a int = -10
    fmt.Println(a)
    var a int = 100000
    fmt.Println(a)
    var a uint8 = 100
    fmt.Println(a)
    //浮点型
    var a float32 = 2.33
    fmt.Println(a)
    // 字符串(必须用双引号),反引号是python中的三引号,可以换行
    //b:='a'
    //fmt.Println("%T",b)
    //var a string = "zy"
//    var c string=`dsjasld
//adasdasdasd
//
//dasdddewed
//sdasd`
//fmt.Println(c)
var c string = "dasd" + // 看着像是换行了,实际上并没有换行
    "dasd" +
    "ad" +
    "ad" +
    "as" +
    "d"
fmt.Println(c)
}

 

 

六.常量

//常量:恒定不变的量
// const 就是定义常量的关键字
package main
import "fmt"
func main() {
    //var a int=10
    //定义了一个常量a
    //const a int=10
    const a =10
    //a=100
    fmt.Println(a)
    const b ="192.168.1.1"

}
那么有什么用了,比如说用在数据库当中,声明

 

七.函数基础

// 函数
package main

import "fmt"

//func main() {
    //test()
    //test(1,2,"dja")
    //var a int = test(1,2) // 太麻烦了
    //a:= test(1,2) //这种方式用的比较多一点
    //fmt.Println(a)
    //a:= test("1","1")
    //fmt.Println(a)

    //a,_:=test(1,2)
    //// 不要第二个返回值了
    //fmt.Println(a)
    ////fmt.Println(b)

    //a:=test()
    //fmt.Println(a)
    //a:=test(
    //test(1,1,2,"dasdsd",2,3,2)



//}

// 函数定义,语法
// func关键字 函数名(参数1 类型,参数2 类型) (返回值类型){}
// 1.无参函数,无返回值
//func test(){
//    fmt.Println("zy")
//}
//2.有两个int类型的参数
//func test(a int,b int){
//func test(a ,b int){
//func test(a ,b int,c string){
//
//    fmt.Println(a+b,c)
//}
//3.有一个数字类型返回值,一定要指定返回值类型
//func test(a ,b int) int {
//    return a+b
//}
// 返回一个字符串类型
//func test(a ,b string) string {
//    return "sadas"
//}
// 4.返回多个值
//func test(a,b int)(int,string){
//    return a+b,"成功"
//}
//5.命名返回值(了解,就用没有命名也可以)
//func test(a,b int)(c int,d string){
//    c = 10
//    d="成功"
//    return
//}

//6.在go当中没有位置参数和关键字参数,都是位置参数,也没有默认值参数
//func test(a,b int) int {
//    return a+b
//}

// 不定长参数 interface:接受任意类型
//func test(a ...interface{}){
//    fmt.Println(a)
//}

 

 

八.函数一定是公民(先了解一下的)

// 先了解一下
// 闭包函数
// 定义在函数内部,对外部作用域有引用
// go语言中,函数是一等公民,可以把函数赋值给一个变量,函数就是一等公民

func test(a int) (int,int) {
    fmt.Println("xxx")
    return 1,2

}

func main() {
    var a func(a int) (int,int)
    //var a = test
    //a:=test
    a = test
    a(1)
}

 

 

posted @ 2019-12-09 21:26  ZHANGYUZY  阅读(497)  评论(0编辑  收藏  举报