go初级

作者: 够浪你大哥 | 来源:发表于2019-02-21 18:57 被阅读0次

程序:
为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合.

API:
是Golang提供的基本编程接口,go语言提供了大量的标准库,因此google公司也为这届标准库提供的响应的API文档,用于高速开发者如何使用这些标准库,以及标准库包含的方法.

绝对路径:从当前盘的最上面开始定位,比如D:test100
相对路径:从当前位置开始定位,去找对应的目录.比如:

转义字符"":

/转义字符的使用"\"
    //"\t"  tab键 
    fmt.Println("小红\t小刚")
    //"\n"  换行
    fmt.Println("小红\n小刚")
    //"\\"  转成普通字符
    fmt.Println("\\Users\\bryme\\Desktop\\amd\\src")
    //"\r"  回车键:,从当前行的最前面开始输出,覆盖掉以前的内容
    fmt.Println("我是你爸爸\r不是")

整体缩进调整(格式化)

Bryme-2:aa bryme$ gofmt 临时.go 
package main

import "fmt"

func main() {
        //转义字符的使用"\"
        //"\t"  tab键
        fmt.Println("小红\t小刚")
        //"\n"  换行
        fmt.Println("小红\n小刚")
        //"\\"  转成普通字符
        fmt.Println("\\Users\\bryme\\Desktop\\amd\\src")
        //"\r"  回车键:,从当前行的最前面开始输出,覆盖掉以前的内容
        fmt.Println("我是你爸爸\r不是")
        fmt.Println("姓名\t年龄\t籍贯\t住址\njohn\t12\t河北\t北京\t")
}
Bryme-2:aa bryme$ gofmt -w 临时.go   //将格式化的内容重新写入到文件

变量:
变量如果没有赋初值,编译器会使用默认值,int为0,string为空字符串,

var a int               //声明一个整形变量(默认值为0)
var b int  = 10         //定义一个变量
c := 10                 //自动推到类型
a,b,c,d := 1,2,3,4       //多重赋值
a,b = b,a                //数据交换(go语言独有)
fmt.Printf("%3d",a)      //保留三位整数,超过三位,全部输出
fmt.Printf("%.4f",a)       //保留小数点后四位,会对第四位四舍五入
float32                 //默认保留小数后7位有效数字
float64                 //默认保留小数后15位有效数字
var str string = "我是你大哥"    //go语言中一个汉字算作3个字符(在linux中一样)
num := len(str)
const a  = 10       //类型可以省略不写

//一次性声明多个变量的方式1
    var n1,n2,n3 int
    fmt.Println("n1=",n1,"n2=",n2,"n3=",n3)

    //一次性声明多个变量的方式2
    var n1,n2,n3 = 100,"tom",888
    fmt.Println("n1=",n1,"n2=",n2,"n3=",n3)

"+"号:
当两边都是数值型时,则作加法运算
当两边都是字符串时,则做字符串拼接

func main() {
    var str1 = "hello"
    var str2 = "world"
    var res = str1 + str2
    fmt.Println("res=",res)
}

枚举:

const(              //枚举
   a = 10           //定义时可以赋值(初始值为0)
   b,c =iota,iota   //在同一行值相同,换一行值加一
   d                //值+1
   e                //值+1
)
```tian
表达式:

b = a-- //不能将自增自减运用在表达式中(go语言独有)
整形的类型:
int 有符号整形,32位系统占4个字节,64位系统占8个字节
uint 无符号整形,32位系统占四个字节,64位系统占8个字节
rune 与int32一样,用于中文字符串
浮点数:
1)浮点数都是有符号的
2)位数部分可能丢失,造成精度损失,flo64的精度比float32的要准确如果我们要保存一个精度高的数,则应该选用float64
3)浮点型的精度不收操作系统的影响,float默认是float64类型
字符型:
在go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值
可以直接给某个变量赋一个数字,然后按格式化输出%c,会输出该数字对应的unicode字符

    var c4 int = 22269
    fmt.Printf("c4=%c\n",c4)

字符类型是可以进行运算的,相当于一个整数,运输时是按照码值运行的

var n1 = 10 +'a'
    fmt.Println("n1=",n1)

字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码

var n1 = 10 +'a'
    fmt.Println("n1=",n1)

bool类型:
不可以用0或非0的整数代替false和true,这点和c语言不通

var b = false
    fmt.Println("b=",b)
    //bool类型占用储存空间是1个字节.bool类型只能取true或者false
    fmt.Println("b 的占用空间 =",unsafe.Sizeof(b))

字符串类型:

//字符串一点赋值了,字符串就不能修改了:在go字符串是不吭呢改变的
    //字符串的两种表示形式:
    //1.双引号,会识别转义字符
    //2.反引号,会以字符串的原生形式输出,包括换行和特殊字符,可以实现防止共计.输出源代码等效果
    str2 := "abc\nabc"
    str3 := `abcd\nabc`
    fmt.Println(str2,str3)

//字符串的拼接

//当一个拼接的操作很长时,怎么办,可以分行写,但是注意,西药将+保留在上一行.
    str4 := "操作很"+"操作很"+ 
    "操作很"+"操作很"+ 
    "操作很"+"操作很" + 
    "操作很"+"操作很"
    fmt.Println(str4)

基础类型的默认值:

var a int //0
    var b float32
    var c float64
    var isMarried bool
    var name string
    //v表示安装变量的值来输出
    fmt.Printf("a=%d,b=%v,c=%v,isMarried=%v name=%v",a,b,c,isMarried,name)

类型转换:
1)go中,数据类型的转换可以从表示范围小-->表示范围大,也可以范围大-->范围小
2)被转换的是变量储存的数据,(即值),变量本身的数据类型并没有变化
3)在转换中,比如将int64转成int8(-128--127),编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样
4)只用同一类型数据类型的数字,才可以进行运算

int(b)     //数据类型转换

百分号格式:

通用:

%v  值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%T  值的类型的Go语法表示
%%  百分号
布尔值:

%t  单词true或false
整数:

%b  表示为二进制
%c  该值对应的unicode码值
%d  表示为十进制
%o  表示为八进制
%q  该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x  表示为十六进制,使用a-f
%X  表示为十六进制,使用A-F
%U  表示为Unicode格式:U+1234,等价于"U+%04X"
浮点数与复数的两个组分:

%b  无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat
%e  科学计数法,如-1234.456e+78
%E  科学计数法,如-1234.456E+78
%f  有小数部分但无指数部分,如123.456
%F  等价于%f
%g  根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G  根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
字符串和[]byte:

%s  直接输出字符串或者[]byte
%q  该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x  每个字节用两字符十六进制数表示(使用a-f)
%X  每个字节用两字符十六进制数表示(使用A-F)    
指针:

%p  表示为十六进制,并加上前导的0x    

把基础类型转换为string类型:
1)fmt.Sprintf方法:

var num1 int = 99
    var num2 float64 = 23.456
    var b bool 
     var mychar byte = 'h'
    var str string //空的str
    //使用第一种凡是来转换 fmt.Sprintf方法把其他数据转换成string
    str = fmt.Sprintf("%d",num1)
    fmt.Printf("str type %T str=%v\n",str,str)

    str = fmt.Sprintf("%f",num2)
    fmt.Printf("str type %T str=%v\n",str,str)

    str = fmt.Sprintf("%t",b)
    fmt.Printf("str type %T str=%v\n",str,str)

    str = fmt.Sprintf("%c",mychar)
    fmt.Printf("str type %T str=%v\n",str,str)

2)strconv.Format方法:

//第二种方式 strconv 函数
    var num3 = 99
    var num4 float64 = 23.455
    var b2 bool = true

    str = strconv.FormatInt(int64(num3),10)
    fmt.Printf("str type %T str=%q\n",str,str)

    //strconv.FormatFloat(num4,'f',10,64)
    //'f':代表格式,'10':代表小数位保留10位,'64':代表这个小数是float64
    str = strconv.FormatFloat(num4,'f',10,64)
    fmt.Printf("str type %T str=%q\n",str,str)

    str = strconv.FormatBool(b2)
    fmt.Printf("str type %T str=%q\n",str,str)

3)strconv.Itoa方法:

//第三种方式strconv.Itoa
    var num5 int = 23556
    str = strconv.Itoa(num5)
    fmt.Printf("str type %T str=%q\n",str,str)

字符串类型转成基本类型:
将string类型转成基本数据类型时,要确保string类型能够转成有效的数据,比如我们可以吧"123"转成一个整数,但是不能把"hello"转成一个整数,如果这样做,golang将直接将其转成0

strconv.Parse方法

var str string = "true"
    var b bool
    //说明;
    //strconv.ParseBool(str)函数会返回两个值(value bool ,err error)
    b,_ = strconv.ParseBool(str)
    fmt.Printf("b type %T b=%v\n",b,b)

    var str2 string = "12345"
    var n1 int64
    var n2 int
    n1,_ = strconv.ParseInt(str2,10,64)
    n2 = int(n1)
    fmt.Printf("b type %T n1=%v\n",n1,n1)
    fmt.Printf("b type %T n2=%v\n",n2,n2)

    var str3 = "123.435"
    var f1 float64
    f1,_ = strconv.ParseFloat(str3,64)
    fmt.Printf("b type %T f1=%v\n",f1,f1)

指针类型:
1)值类型,都有对应的指针类型,形式为数据类型,比如int的对应的指针就是int,float32对应的指针类型就是 *float32,依次类推.

//指针类型:
    var i int = 10
    //取出i的地址
    fmt.Println("i的地址=",&i)
    //ptr为指针类型的变量,可以储存内存地址,其指向的值为i的值
    var ptr *int = &i
    fmt.Printf("ptr=%v\n",ptr)
    fmt.Printf("ptr 的地址=%v\n",ptr)
    fmt.Printf("ptr 指向的值=%v\n",*ptr)

标识符的案列:

hello    //ok
hello2    //ok
1hello    //error,不能以数字开头
h-b    //error,不能使用
x  h    //error,不能含有空格
h_4    //ok
_ab    //ok
int    //ok,最好不要这样使用,容易造成误会
float32    //ok,最好不要这样使用,容易造成误会
_      //error
Abc    //ok

运算符:
1)对于除号"/",它的整数除和小数除是有区别的,整数之间做除法时,只保留整数部分而舍弃小数部分.列如:x:19/5,结果是3
2)当对一个数取模时,可以等价a%b=a-a/b*b,这样我们可以看到取模的一个本质运算.
3)Golang的自增自减只能当做一个独立语言是用来时,不能这样使用.b:=a++ 或者b:=a--
4)Golang的++和--只能写在变量的后面,不能写在变量的前面,没有++a和--a

//取模"%"的使用:
    fmt.Println("10%3=",10%3)   //=1
    fmt.Println("-10%3=",-10%3) //=-1
    fmt.Println("10%-3=",10%-3) //=1
    fmt.Println("-10%-3=",-10%-3)   //-1

逻辑运算符:
&&: 并且,两边的操作都是true,则为true,否则为False
||: 或者,如果两边的操作有一个是true,则为true,否则为false
!: 不,否,如果条件为true,则逻辑为false,如果条件为false,则逻辑为true
复合赋值的操作:

a := 2
    //复合赋值的操作
    a +=17//相当于a = a + 17
    fmt.Println("a=",a)

赋值运算符的特点:
1)运算顺序是从右往左
2)赋值运算符的左边只能是变量,而右边可以是变量,表达式,常量.
3)复合赋值运算符等于a = a + 3
运算符的优先级一览表:


image.png

在golang中没有三元运算的效果,如果想要实现的话,可以用if语句俩实现:

var n int
    var i int = 10
    var j int = 20
    //传统的三元运算
    //n = i > j ? i :j
    if i > j{
        n = i
    }else{
        n = j
    }
    fmt.Println("n=",n)

获取控制台输入的数据:

var name string
    var age byte
    var sal float32
    var isPass bool
    fmt.Println("请输入姓名")
    //当程序执行到fmt.Println("请输入姓名"),程序会停止在这里,等待用户输入,并回车
    fmt.Scanln(&name)

    fmt.Println("请输入年龄")
    fmt.Scanln(&age)
    
    fmt.Println("请输入薪水")
    fmt.Scanln(&sal)

    fmt.Println("请输入是否通过考试")
    fmt.Scanln(&isPass)
    fmt.Printf("名字是%v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n",name,age,sal,isPass)

golang中的进制>>>>>>>>>>>>>>>>>>>>>>>>>>
1)二进制:0和1,满2进1
在golang中,不能直接使用二进制来表示一个整数,它沿用了c的特点
2)十进制:0-9,满10进1
3)八进制:0-7,满8进1,以数字0开头表示.
4)十六进制:0-9及A-F,满16进1,以0x或0X开头表示,A-F不区分大小写.

var i int = 5
    //转为二进制输出
    fmt.Printf("%b \n",i)

    //八进制:0-7,满8进1,以数字0开头
    var j int = 011
    fmt.Println("j=",j)

    //十六进制,满16进1,以0x或0X开头表示
    var k int = 0x11
    fmt.Println("k=",k)

进制之间的转换>>>>>>>>>>>>>>>>>>>>>>
二进制转十进制:


image.png

switch语句:

switch a {      //switch中不能使用浮点型数据(浮点型数据是一个约等于数据)
default:        //如果输入的值没有满足条件进入默认选项
}

this指针:

//在go语言中有一句话"go语言中没有隐藏的this指针"

//我们要操作的这个对象它是显示传递的,没有像是其他语言一样被隐藏起来

//操作对象的时候不一定为要叫做this

//操作对象的时候不一定要非使用指针

for循环:

for{
    fmt.Println("hello")
    continue            //结束本次执行,继续下次循环
    break               //跳出循环(如果在多重循环中使用,则跳出当前循环)
    }

函数:

   test2(a[0:]...)         //如果函数为不定参数,传递方式为a[0;]

相关文章

  • go初级

    程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合. API:是Golang提供的基本编程接...

  • golang

    一、go基础 二、go应用 1 初级应用 1.1. 反射reflection 1.2. server服务 1.3....

  • GO语言初级学习之代码案例08(生产者消费者模型)

    GO语言初级学习之代码案例08-生产者消费者模型 @(go语言 黑马)[GO语言] 条件变量模拟生产者消费者模型 ...

  • GO语言初级学习之代码案例03

    GO语言初级学习之代码案例03 @(go语言 黑马)[GO语言] 打印等腰三角形 题目:通过程序打印出一个“ * ...

  • go语言线程初级实例

    教材取自韩顺平老师教材, 更改变量AA和BB测速你的电脑或服务器. 本人电脑amd2700x/3.7g,结果 使用...

  • 【初级入门】Go开发环境安装

    Go 语言安装 直接去官网[https://golang.org/dl/] 下载对应版本,注意区分Mac arm架...

  • 微软HoloLens:AR应与人工智能结合

    不同于《Pokemon Go》最初级的AR效果,HoloLens全息眼镜终于让人有种体验到钢铁侠中AR的满足感,虚...

  • Go语言 日志组件编写

    在使用Go语言的时候,发现标准库的日志log功能很初级。 基本也就围绕上面几个方法来做日志处理。于是我上Githu...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • GO语言初级学习之代码案例05

    @(go语言 黑马)[GO语言] 统计各字母的个数 题目:输入一串字母,统计各个字母输入的个数 逻辑:该案例统计字...

网友评论

      本文标题:go初级

      本文链接:https://www.haomeiwen.com/subject/xgckrqtx.html