zoukankan      html  css  js  c++  java
  • go语言学习笔记(2)--go语言语法细节与基本数据类型

    //go语言语法细节

    package main

    import "fmt"




    func test1(){
    var a int
    var s string


    //go语言要求,每一个变量被申明的时候必须要赋初值,a这个时候是0,s是空串""
    //如果变量被申明那么一定要被引用,不然就不能通过编译
    fmt.Println(a,s) //打印不出来s的值,s是空串,
    fmt.Printf("%d,,,,,%q",a,s) //%q 会打印出字符串的引号

    ///////////////////////////////////////////////////////////////////

    var b, c int = 1, 2
    var str string = "string"
    fmt.Println(b,c,str) //如上,变量赋值方式。

    /////////////////////////////////////////////////////////////////////

    var d, e = 1, 2;
    var string = "string value"
    fmt.Println(d,e,string)//关键字其实可以省略,他可以通过后面的类型自动判断数据类型

    ////////////////////////////////////////////////////////////////////

    //那么我是不是可以这样玩儿呢?
    var m,n,o,p,q = 1,2,"str",true,3.14
    fmt.Println(m,n,o,p,q)//一次定义中有各种的类型,也是支持的。

    ////////////////////////////////////////////////////////////////////

    //然后变量的定义,可以省略var,于是有
    aa, bb, cc, dd, ee := 1,2,"str",true,3.14 //加个冒号
    bb = 1 //这是对已经声明的变量重新复制不能有冒号
    fmt.Println(aa,bb,cc,dd,ee)//你看,很灵性

    //接下来看函数外面,我将进行全局变量的定义
    }

    var theaa = 1
    var thess = "str"
    //thebb := 1 这种写法是错的,这种变量不能这样写,错了。
    //重点说一句,这两个变量不是全局变量,这只是一个包内部的变量,go语言没有全局变量额说法,都是以包内部这种
    //他的作用域只是包内部

    //为了不写很多var,可以这样写哦
    var(//注意是括号
    vi, vb= 1, 3//嗯,没得问题
    va = "a" //这里哦
    )//这里的一群变量,嗯,这种也支持函数内部

    var vvi, vva = 1, "aa";//嗯,基本规则没有问题

    //咳咳,发现没有,全局变量没有被引用哦,前面说的规定,自己打脸了撒

    func main() {
    fmt.Print("hello world")
    test1()
    fmt.Println(vi,vb,va,vvi,vva,theaa,thess) //全局的引用
    }


    //go语言数据类型
    package main

    import (
    "fmt"
    "math/cmplx"
    "math"
    )

    //go语言的内建变量类型,咳咳,今天我才搞懂,什么是内建变量,就是语言内置类型,也就是基本数据类型
    //bool, string
    //(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr(加了u就是无符号的意思)
    //byte,rune(这是啥,这就是c,java中的char,字符型,为了应对多国语言的一个字符,采用rune,他是4个字节的)
    //float32, float64, complex64, complex128 //看见了新生的东西,顿时产生敬仰之情,
    // complex是复数,他有实部与虚部,可以表示一个二维平面的数(数学之美),float是浮点数,明确说出了他的位数
    //
    // 来我们来回一下复数的知识, 3 + 4i -> 这就表示了一个点,长度是5,
    // emm,接下来,e ^ (a*i)= cos a + i sin a --> 表示一个圆,a是一个角度 ,,这个公式会是高等数学里面的泰勒基数展开,
    // 上面的这个圆的长度都为1,而且e^(a * i)也是周期函数,emmmm,讲不下去了,不讲了可以吗?
    // 嗯,最后一句, e(i * pi) + 1 = 0 这是欧拉公式。
    // 嗯,骚年,是时候去认真回顾下高等数学了。

    func main() {
    //上面讲了一大堆,首先,复数
    c := 3 + 4i //记住了,这个4i必须连着写,中间不能有乘号什么的。
    a := cmplx.Abs(c) //计算长度

    fmt.Println(c) //(3+4i)
    fmt.Println(a) //5
    //fmt.Println("这个复数的长度为" + a) // java的这种写法不对了吗?

    //这里来一个欧拉公式
    oula()


    //go语言的类型转换,go语言不存在隐式类型转换,全是强制转换
    var aaa, bbb int = 1 ,2
    var ccc int
    ccc = int(math.Sqrt(float64(aaa * aaa + bbb * bbb))) //强制转换
    fmt.Println(ccc)

    //遗留问题,强制转换的时候,很多语言都存在的问题,浮点数表示并不准确,那么4.99999999999999999999这种,本来浮点是5,但是取整结果却是4哦
    //怎么办?这个明天再说
    }

    func oula(){
    fmt.Println(cmplx.Pow(math.E,1i * math.Pi) + 1) //(0+1.2246467991473515e-16i)
    fmt.Println(math.Exp(1i * math.Pi) + 1) //与上面一样
    //这里不是0,虚部是一个很小的浮点数,所以结果只是接近0,负数的实部虚部都是两个等长的浮点型数据,结果与python一样
    }

    //最后还想说下,每一个go语言文件,如果想要运行起来,文件上面必须得下package main,这样文件内部的main函数才会作为入口可以执行。
  • 相关阅读:
    paip.解决Invalid byte 2 of 2byte UTF8 sequence.
    poj1157
    poj1258
    poj1160
    poj1113
    poj1159
    !!!GRETA正则表达式模板类库
    【原创】C#与C++的混合编程采用其中的第三种方法
    WinApi.cs
    C#:正则表达式30分钟入门教程
  • 原文地址:https://www.cnblogs.com/luohuayu/p/9123264.html
Copyright © 2011-2022 走看看