go基本语法(一)学习笔记

第一个Go程序

package main

    import (
        "fmt"
    )

    func main() {
        fmt.Println("Hello Go!")
    }
内建常量: 
    true false iota nil
内建类型: 
        int int8 int16 int32 int64
        uint uint8 uint16 uint32 uint64 uintptr
        float32 float64 complex128 complex64
        bool byte rune string error
内建函数: 
        make len cap new append copy close delete
        complex real imag
        panic recover
    var v1 int
    var v2 int

    //一次定义多个变量
    var v3, v4 int 

    var (
        v5 int
        v6 int
    )

变量初始化

var v1 int = 10  // 方式1
    var v2 = 10       // 方式2,编译器自动推导出v2的类型
    v3 := 10           // 方式3,编译器自动推导出v3的类型
    fmt.Println("v3 type is ", reflect.TypeOf(v3)) //v3 type is  int

    //出现在 := 左侧的变量不应该是已经被声明过,:=定义时必须初始化
    var v4 int
    v4 := 2 //err

变量赋值

     var v1 int
    v1 = 123

    var v2, v3, v4 int
    v2, v3, v4 = 1, 2, 3    //多重赋值

    i := 10
    j := 20
    i, j = j, i    //多重赋值

匿名变量

_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃:

_, i, _, j := 1, 2, 3, 4

    func test() (int, string) {
        return 250, "sb"
    }

    _, str := test()

常量

在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

        const Pi float64 = 3.14
        const zero = 0.0 // 浮点常量, 自动推导类型

        const ( // 常量组
            size int64 = 1024
            eof        = -1 // 整型常量, 自动推导类型
        )
        const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
        const a, b, c = 3, 4, "foo"
        // a = 3, b = 4, c = "foo"    //err, 常量不能修改

iota枚举

常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。

在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。

const (
x = iota // x == 0
y = iota // y == 1
z = iota // z == 2
w // 这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用”= iota”
)

    const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0

    const (
        h, i, j = iota, iota, iota //h=0,i=0,j=0 iota在同一行值相同
    )

    const (
        a       = iota //a=0
        b       = "B"
        c       = iota             //c=2
        d, e, f = iota, iota, iota //d=3,e=3,f=3
        g       = iota             //g = 4
    )

    const (
        x1 = iota * 10 // x1 == 0
        y1 = iota * 10 // y1 == 10
        z1 = iota * 10 // z1 == 20
    )

基础数据类型

这里写图片描述

布尔类型

var v1 bool
v1 = true
v2 := (1 == 2) // v2也会被推导为bool类型

//布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换
var b bool
b = 1 // err, 编译错误
b = bool(1) // err, 编译错误

整型

  var v1 int32
    v1 = 123
    v2 := 64 // v1将会被自动推导为int类型

浮点型

 var f1 float32
    f1 = 12
    f2 := 12.0 // 如果不加小数点, fvalue2会被推导为整型而不是浮点型,float64

字符类型

在Go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表utf-8字符串的单个字节的值;另一个是rune,代表单个unicode字符。

package main

    import (
        "fmt"
    )

    func main() {
        var ch1, ch2, ch3 byte
        ch1 = 'a'  //字符赋值
        ch2 = 97   //字符的ascii码赋值
        ch3 = '\n' //转义字符
        fmt.Printf("ch1 = %c, ch2 = %c, %c", ch1, ch2, ch3)
    }

字符串

        var str string                         // 声明一个字符串变量
        str = "abc"                        // 字符串赋值
        ch := str[0]              // 取字符串的第一个字符
        fmt.Printf("str = %s, len = %d\n", str, len(str)) //内置的函数len()来取字符串的长度
        fmt.Printf("str[0] = %c, ch = %c\n", str[0], ch)

        //`(反引号)括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出。
        str2 := `hello
        mike \n \r测试
        `
        fmt.Println("str2 = ", str2)

复数类型

复数实际上由两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示虚部(imag)。

         var v1 complex64 // 由2个float32构成的复数类型
        v1 = 3.2 + 12i
        v2 := 3.2 + 12i        // v2是complex128类型
        v3 := complex(3.2, 12) // v3结果同v2

        fmt.Println(v1, v2, v3)
        //内置函数real(v1)获得该复数的实部
        //通过imag(v1)获得该复数的虚部
        fmt.Println(real(v1), imag(v1))

输出

//整型

   a := 15
        fmt.Printf("a = %b\n", a) //a = 1111
        fmt.Printf("%%\n")        //只输出一个%

        //字符
        ch := 'a'
        fmt.Printf("ch = %c, %c\n", ch, 97) //a, a

        //浮点型
        f := 3.14
        fmt.Printf("f = %f, %g\n", f, f) //f = 3.140000, 3.14
        fmt.Printf("f type = %T\n", f)   //f type = float64

        //复数类型
        v := complex(3.2, 12)
        fmt.Printf("v = %f, %g\n", v, v) //v = (3.200000+12.000000i), (3.2+12i)
        fmt.Printf("v type = %T\n", v)   //v type = complex128

        //布尔类型
        fmt.Printf("%t, %t\n", true, false) //true, false

        //字符串
        str := "hello go"
        fmt.Printf("str = %s\n", str) //str = hello go

输人

    var v int
    fmt.Println("请输入一个整型:")
    fmt.Scanf("%d", &v)
    //fmt.Scan(&v)
    fmt.Println("v = ", v)

类型转换

Go语言中不允许隐式转换,所有类型转换必须显式声明,而且转换只能发生在两种相互兼容的类型之间。

var ch byte = 97
//var a int = ch //err, cannot use ch (type byte) as type int in assignment
var a int = int(ch)

类型别名

type bigint int64 //int64类型改名为bigint
        var x bigint = 100

        type (
            myint int    //int改名为myint
            mystr string //string改名为mystr
        )

猜你喜欢

转载自blog.csdn.net/qq_35433716/article/details/82152328