zoukankan      html  css  js  c++  java
  • 初识Go(5)

    main函数和init函数

    虽然一个 package里面可以写任意多个 init 函数,
    但这无论是对于可读性还是以后的可维护性来说,我们都
    强烈建议用户在一个 package 中每个文件只写一个 init
    函数。Go 程序会自动调用 init()和 main(),所以你不需
    要在任何地方调用这两个函数。每个package 中的 init 函
    数都是可选的,但 package main 就必须包含一个 main 函数。

    main 函数引入包初始化流程图


    import操作

    1. 点操作
    我们有时候会看到如下的方式导入包
    import(
    . "fmt"
    )
    这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,
    也就是前面你调用的 fmt.Println("hello world")可以省略的写成 Println("hello world")

    2. 别名操作
    别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字
    import(
    f "fmt"
    )

    3. _操作
    这个操作经常是让很多人费解的一个操作符,请看下面这个 import
    import (
    "database/sql"
    _ "github.com/ziutek/mymysql/godrv"
    )
    _操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的 init 函数

    struct
    Go 语言中也和C或者其他语言一样,我们可以声明新的类型,
    作为其它类型的属性或字段的容器.

    type person struct {
        name string
        age int
    }
    var P person // P 现在就是 person 类型的变量了
    P.name = "Astaxie" // 赋值"Astaxie"给 P 的 name 属性.
    P.age = 25 // 赋值"25"给变量 P 的 age 属性
    

      

    另外两种声明方式:
    1.按照顺序提供初始化值
    P := person{"Tom", 25}
    2.通过 field:value 的方式初始化,这样可以任意顺序
    P := person{age:24, name:"Tom"}

    Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。

    type Human struct {
        name string
        age int
        weight int
    }
    type Student struct {
        Human // 匿名字段,那么默认 Student 就包含了 Human 的所有字段
        speciality string
    }
    

      

    这里有一个问题:如果 human 里面有一个字段叫做 phone,而 student 也有一个字段叫做
    phone,那么该怎么办呢?
    Go 里面很简单的解决了这个问题,最外层的优先访问,也就是当你通过 student.phone 访
    问的时候,是访问 student 里面的字段,而不是 human 里面的字段。

  • 相关阅读:
    网络编程基础之TCP编程学习(一)
    日常巡检(脚本)
    Mysql主主配置
    创建用户和相对应的随机密码
    企业网络连接测试
    Docker 方式部署 Gitlab 并使用自定义的http端口
    Vue学习笔记(二):使用Axios进行跨域请求
    Vue学习笔记(一):引入Bootstrap和jQuery
    C# / .NET Core 调用javascript方法(适用于Windows/Linux平台)
    Centos7.7安装bcm43142(博通)无线网卡驱动
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/4181974.html
Copyright © 2011-2022 走看看