• go 基础(一)


    学习资料

    https://gobyexample.com/

    windows安装

    下载:https://golang.google.cn/dl/

    golang在设置windows环境变量的时候有点问题,喜欢在文件夹后面加\,设置完之后最好自己再改一遍。

    编辑环境变量GOROOT,将D:Go改成D:Go

    编辑环境变量path,删掉;D:Goin\,然后在最开头写上%GOROOT%in;

    编辑环境变量GOPATH,设置项目路径

     

    官网学习: https://tour.go-zh.org/welcome/1

    开发工具:https://www.jetbrains.com/go/

    包:https://go-zh.org/pkg/

    安装第三方包go get

    go get github.com/go-sql-driver/mysql

     

    Centos 7 安装

    1、下载安装包go1.9.2.linux-amd64.tar.gz

    2、上传到服务器,解压文件

    tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
    

    3、配置环境变量

    cd ~
    vi .bash_profile 
    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    export GOPATH=$HOME/gopath
    

    注:要加载的包的源代码必须放在GOPATH路径下的src目录,否则还是提示加载不到包

    4、测试

    cd ~
    mkdir -p gopath/src/hello
    cd /root/gopath/src/hello

    编辑文件

    vi hello.go
    package main
    
    import "fmt"
    
    func main() {
        fmt.Printf("hello, world
    ")
    }

    编译

    cd /root/gopath/src
    go install hello 

    运行

    $GOPATH/bin/hello

    Go基本命令

    go run 快速执行go文件,就像执行脚本一样

    go build 编译程序,生成二进制可执行文件

    go install 安装可执行文件到bin目录

    go test 执行单元测试或压力测试

    go env 显示go相关的环境变量

    go fmt 格式化源代码

    godoc -http=:9090  本地启动go帮助文档

    Go程序结构

    go源码按package进行组织,并且package要放到非注释的第一行

    一个程序只有一个main包和一个main函数

    main函数是程序的执行入口

    文件名&关键字&标识符

    1. 所有go源码以.go结尾

    2. 标识符以字母或下划线开头,大小写敏感

    3. _是特殊标识符,用来忽略结果

    4. 保留关键字

    基本结构体打码,文件名hello.go

    package main
    
    import(
    	"fmt"
    )
    
    func main() {
    	fmt.Println("hello world")
    }
    

    说明:

    • 任何一个代码文件隶属于一个包
    • import 关键字,引用其他包:
    import(“fmt”)
    import(“os”)
    通常习惯写成:
    import (
          “fmt”
           “os”
    )
    
    • golang可执行程序,package main, 并且有且只有一个main入口函数
    • 包中函数调用:a. 同一个包中函数,直接调用; b. 不同包中函数,通过包名+点+函数名进行调用
    • 包访问控制规则:a.大写意味着这个函数/变量是可导出的;b. 小写意味着这个函数/变量是私有的,包外部不能访问

    运行方式:go run  hello.go

    编译方式:go build -o bin/hello.exe go_devmain(备注:编译时src路径可以不写,go会默认去src下寻找的go_devmain)

    Go 初始化过程

    1、首先是import pkg的初始化过程

    2、pkg中定义的const变量初始化

    3、pkg中定义的var全局变量

    4、pkg中定义的init函数,可能有多个

    在 pkg 内,pkg level的 var 变量按照声明的顺序进行声明,但是要在依赖初始化变量的后面。

    初始化的顺序: d, b, c, a

    https://golang.org/ref/spec#Program_initialization_and_execution

    package main
    
    import(
    	"fmt"
    )
    
    var (
    	a = c + b
    	b = f()
    	c = f()
    	d = 3
    )
    
    func f() int {
    	d++
    	return d
    }
    
    func main(){
    	fmt.Println(d,c,b,a)
    }

    常量

    1、常量使用const 修饰,代表永远是只读的,不能修改。

    2、const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string。

    3、语法:const identifier [type] = value,其中type可以省略。

    举例:

    const b string = "hello world"
    const b = "hello world"
    const Pi = 3.1415926
    const a = 9/3

    写法二:

    const(
        a = 0
        b = 1
        c = 2
    )

    写法三:

    const(
        a = iota
        b //1
        c //2
    )
    

    变量

    1、语法:var identifier type

    举例:

    var a int
    var b string
    var c bool
    var d int = 8
    var e string = "hello world"
    

    写法二:

    var(
        a int //默认为0
        b string //默认为""
        c bool //默认为false
        d int = 8
        e string = "hello world"
    )
    

    写法三:

    var(
        a int
        b string
        c bool
        d = 8
        e = "hello world"
    )
    

    值类型和引用类型

    1、值类型:变量直接存储值,内存通常在栈中分配。

    基本数据类型int、float、bool、string以及数组和struct。

    2、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在 堆上分配。通过GC回收。

    引用类型:指针、slice、map、chan等都是引用类型。

    变量的作用域

    1、在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部。

    2、在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的, 则作用于整个程序。

    package main
    
    import "fmt"
    
    func isPrime(n int) bool{
    	/*
    	判断 101-200 之间有多少个素数,并输出所有素数
    	定义:为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数
    	 */
    	for i := 2; i < n; i ++ {
    		if n%i == 0 {
    			return false
    		}
    	}
    	return true
    }
    
    func main(){
    	var n int
    	var m int
    	fmt.Scanf("%d%d", &n, &m)
    	/*
    	var n int是声明,但是没有赋值,它作用于main函数中
    	n是值,&n是n的地址,
    	Scanf是一个函数,如果传入的是n,它是将n拷贝一份,传入Scanf进行处理,没有将main中的n赋值成功,只是改变了赋值后的n
    	传入&n地址,它指向n的存储地址,通过Scanf处理,可以真正改变n的值
    	 */
    	fmt.Printf("%d %d
    ", n, m)
    
    	for i := n; i < m; i ++ {
    		if isPrime(i) == true {
    			fmt.Printf("%d
    ", i)
    			continue
    		}
    	}
    }

    数据类型和操作符

    1、bool类型,只能存true和false,默认值是false

    var a bool
    var a bool = true
    var a = true
    

    2、相关操作符, !、&&、|| (取反、与、或)

    3、数字类型,主要有int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64

    • int有符号,正负
    • int8一个字节,int16两个字节
    • uint无符号
    • uint8一个字节,0-255

    注:int后面带数字,跟操作系统无关;int后面无数据,根据不同操作系统,占用字节数不同。

    4、类型转换,type(variable),比如:var a int=8;  var b int32=int32(a)

    注:Go是强类型语⾔言,不不同类型相加以及赋值是不不允许的,需要类型转换。

    5、逻辑操作符: == 、!=、<、<=、>和 >=

    6、数学操作符:+、-、*、/、%

    7、字符类型:var a byte,字符是单引号

    • 在Go语言中支持两个字符类型,一个是 byte (实际上是 uint8 的别名),代表UTF-8字符串的单个字节的值;
    • 另一个是 rune ,代表单个Unicode字符。出于简化语言的考虑,Go语言的多数API都假设字符串为UTF-8编码。

    8、字符串类型: var str string,字符串表示两种方式: 1)双引号    2)``   (反引号)

    • 双引号, "",可以包含控制字符
    • 反引号, ``,所有字符都是原样输出

    9、复数类型:complex64和complex128,var c complex64 = 5 + 10i

    内置函数 complex(re, im) 构造一个复数

    10、位操作符

    • 与操作: &
    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0
    • 或操作:|
    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0
    • 异或: ^
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0
    • 左移 <<
    1 << 10 = 1024
    1 << 20 = 1M
    1 << 30 = 1G
    
    • 右移 >>
    1024 >> 10 = 1
    1024 >> 1 = 512
    1024 >> 2 = 256

    占位符

    万能输出占位符: %v

  • 相关阅读:
    第七节:详细讲解Java中的日期,java.util.date
    第七节:详细讲解Java中的日期,java.util.date
    第六节:详细讲解Java中的装箱与拆箱及其字符串
    第六节:详细讲解Java中的装箱与拆箱及其字符串
    第五节:详细讲解Java中的接口与继承
    第五节:详细讲解Java中的接口与继承
    第四节:详细讲解Java中的类和面向对象思想
    第四节:详细讲解Java中的类和面向对象思想
    第三节:带你详解Java的操作符,控制流程以及数组
    第三节:带你详解Java的操作符,控制流程以及数组
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/7416420.html
Copyright © 2020-2023  润新知