https://www.youtube.com/watch?v=cN_DpYBzKso

https://blog.golang.org/gos-declaration-syntax

1.golang _下划线

import 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。 import就是不直接使用包,只是执行一下这个包的init函数,把mysql的驱动注册到sql包里,然后程序里就可以使用sql包来访问mysql数据库了。

下划线在代码中 下划线意思是忽略这个变量.比如os.Open,返回值为*os.File,error普通写法是f,err := os.Open(xxxxxxx)如果此时不需要知道返回的错误值就可以用f, _ := os.Open(xxxxxx)如此则忽略了error变量也可能是占位符,意思是那个位置本应赋给某个值,但是咱们不需要这个值,所以就把该值赋给下划线,意思是丢掉不要,这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。这种情况是占位用的,方法返回两个结果,而你只想要一个结果,那另一个就用 _ 占位,而如果用变量的话,不使用,编译器是会报错的

2.golang struct 定义中json``解析说明 tag (声明) 重命名 作用,完成json的一些定制化操作

//在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容。`TAB键左上角的按键,~线同一个键盘`
type Student struct {
StudentId string `json:"sid"`
StudentName string `json:"sname"`
StudentClass string `json:"class"`
StudentTeacher string `json:"teacher"`
}
 //NO.1 with json struct tag
s := &Student{StudentId: "1", StudentName: "fengxm", StudentClass: "0903", StudentTeacher: "feng"}
jsonString, _ := json.Marshal(s)
fmt.Println(string(jsonString))
//{"sid":"1","sname":"fengxm","class":"0903","teacher":"feng"}

https://cizixs.com/2016/12/19/golang-json-guide/

3.golang 引入自定义包

要想引入自定义的包,需要自定义包的路径为GOPATH路径中。

近日在学习Golang的自定义包的创建方式,产生了一些经验,因此以这篇文章作为记录。

我们通过import语句将自定义包加入到我们项目main函数中,import语句后面的参数应该是文件夹的名称,和自定义包的package的名称或者自定义包里面的文件名称没有关系,例如文件的结构目录如下:

main.go的源码:

package main

import "fmt"
import "foo" func main() {
bar.Abc()
fmt.Print("This is main\n")
}

foo/test.go的源码:

package bar

import "fmt"

func Abc() {
fmt.Print("This is test print\n")
}

上面的代码是顺利通过编译的。我们可以总结以下几点:

(1)import语句使用的是文件夹的名称

上面例子中的import后面的参数对应的就是文件夹foo

(2)文件夹的名称和package的名称不一定相同

上面的例子中,文件夹是foo,而package名称是bar。

(3)调用自定义包使用package名称.函数名的方式

例如上面使用的bar.Abc()。

(4)自定义包的调用和文件名没有关系

例如上面的test.go文件,如果改成test_abc.go,程序也能正常编译。编译系统会自动查找foo文件夹下的所有文件,在其中寻找package bar,然后选择Abc函数。

 



golang 概念理解的更多相关文章

  1. 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  2. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  3. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  4. SNF快速开发平台2019-角色、权限、账户的概念理解-非常全的理论讲解权限控制

    组织模型   资源模型  操作模型 谁能够执行哪些操作    执行资源的范围 资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限 权限概念权限是对资源 ...

  5. elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划

    1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...

  6. fragment概念理解

    fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...

  7. ubuntn系统下将文件拷贝到优盘中及挂载概念理解

    参考资料:http://jingyan.baidu.com/article/7082dc1c76f178e40a89bdd3.html: http://bbs.csdn.net/topics/3801 ...

  8. Ceph 概念理解

    简介 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务. 在虚拟化领域里,比较常用到的是Ceph的块设备存储, ...

  9. JavaScript的作用域和块级作用域概念理解

    作用域 作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期.说到这里我们需要理解两个概念:块级作用域与函数作用域. 函数作用域 这个应该好理解,函数作用域就是说定义在 ...

  10. OpenStack中Keystone的基本概念理解

    原文http://www.kankanews.com/ICkengine/archives/10788.shtml Keystone简介 Keystone(OpenStack Identity Ser ...

随机推荐

  1. 10_Linux基础-SHELL入门1

    @ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...

  2. ESP8266 NONOS SDK学习

    一.概况 1.存储 ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM.iRAM 进一步 分成两块:32 KB iRAM 块运行标有 IRAM_A ...

  3. MySQL 不同隔离级别,都使用了什么锁?

    大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...

  4. Gitea 1.17.1 正式发布 | 08 累积更新

    Gitea 1.17.1 已正式发布.在这个小的版本更新中我们合并了 35 个 PR,没有包含功能性的更改,但我们强烈建议用户升级到此版本以获得重要的修复补丁. 致谢:感谢报告问题的安全研究人员,同时 ...

  5. golang 实现笛卡尔积(泛型)

    背景 input: [[a,b],[c],[d,e]] output: [[a,c,d],[a,c,e],[b,c,d],[b,c,e]] 思路:分治 预处理第一项:[a,b] -> [[a], ...

  6. Python数据科学手册-机器学习: 支持向量机

    support vector machine SVM 是非常强大. 灵活的有监督学习算法, 可以用于分类和回归. 贝叶斯分类器,对每个类进行了随机分布的假设,用生成的模型估计 新数据点 的标签.是属于 ...

  7. 彻底掌握Makefile(一)

    彻底掌握Makefile(一) 介绍 makefile就是一个可以被make命令解析的文件,他定义了一系列编译的规则,帮助我们更加方便.简洁的去完成编译的过程.在一个大工程当中我们会有各种各样的文件, ...

  8. 【项目实战】自备相机+IMU跑通Vins-Mono记录

    前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...

  9. Elasticsearch中text与keyword的区别

    text类型 1:支持分词,全文检索,支持模糊.精确查询,不支持聚合,排序操作; 2:test类型的最大支持的字符长度无限制,适合大字段存储: 使用场景: 存储全文搜索数据, 例如: 邮箱内容.地址. ...

  10. docker方式安装Redash

    之前使用的项目GitHub地址是https://github.com/dazdata/redash.git,这个是直接复制国外的项目的,地址:https://github.com/getredash/ ...