Go Programming Language 3
【Go Programming Language 3】
1、These two statements declare a struct type called and a variable called that Employee dilbert is an instance of an Employee:
2、struct
variable 使用 dot 来访问成员,pointer 也可以使用 dot 来访问成员。
The last statement is equivalent to:
3、struct 定义时,同类型的 member 可以合为同一行
4、struct literal
如果member为小写,则在另一个 package中,不能使用 struct literal 赋值。如:
5、Struct Embedding and Anonymous Fields
正常的 Struct,按下左图声明,按下右图使用。
在 Go中,可以使用 Anonymous Struct Field,如下图左定义,如下图右使用。使用上比正常的Struct更加简洁。
使用 Anonymous Fields 的 Struct 无法使用普通的 Struct Literal,所以下面的 literal 都会引起编译错误。
Anonymous Struct Literal 须像下面这样定义。
6、JSON
Go has excellent support for encoding and decoding thesefor mats, provided by the standard library packages encoding/json, encoding/xml, encoding/asn1, and so on.
使用 json.Marshal() 函数可以将 struct 转换为 JSON Data。下面左图中的 json字符串为 field tag。
a field tags. A field tag is a string of metadata associated at compile time with the field of a struct:
json.MarshalIndent() 函数可以返回可视化的排版结果。
Only exported fields are marshaled, which is why we chose capitalized names for all the Go field names.
json.Unmarshal() 用于解包,并且可以部分解包。
7、Text and HTML Templates
text/template、html/template packages, which provide a mechanism for substituting the values of variables into a text or HTML template.
{{range .Items}} and {{end}} actions create a loop, so the text between them is expanded multiple times, with dot bound to successive elements of Items.
the | notation makes the result of one operation the argument of another, analogous to a Unix shell pipeline.
创建一个Template时,可以设置函数环境变量。
创建后,使用 Execute() 方法,即可执行一次template。
类型 template.HTML 会将自己直接插入进template,而 string 则会将自己作为 string 插入 template。
8、函数定义
a sequence of parameters or results of the same type can be factored so that the type itself is written only once.
Here are four ways to declare a function with two parameters and one result
9、io.EOF 的使用
10、variadic function
通过 slice... 可以用于解包 slice
func f(...int)、func g([]int) 与 [] int是两个不同类型的函数。
...interface{} 用于表明接受任意参数。
11、defer
a defer statement is an ordinary function or method call prefixed by the keyword defer. The actual call is deferred until the function that contains the statement defer has finished.
The right place for a statement that releases a resource is defer immediately after the resource has been successfully acquired.
使用 defer 标记函数的开始与结束时间。
A deferred anonymous function can even change the values that the enclosing function returns to its caller:
12、Methods with a Pointer Receiver
method declarations are not permitted on named types that are themselves pointer types:
值调用、指针调用规则 ,共有4种情况:
1、指针调用指针、值调用值肯定是OK的。
2、值调用指针,分情况。
1)可寻址变量,编译器会将 val.x 改写为 (&val).x
2)不可寻址变量,无法调用。
3、指针调用值
永远OK,因为从地址总是能获取到value。
13、Method Value
receiver.Method,返回的值叫 methodValue,是一个跟receiver绑定的函数。
Method Expression
T.Method,返回的值叫 Method Expression,第一个参数为 T receiver。
14、Composing Types by Struct Embedding
嵌入一个匿名Struct后,其Method也被嵌入了。
15、interface
16、embedding an interface
17、如果一个类型有以下方法。
func (*T) Close(),
则只有 *T 可以赋值给io.Closer,而T不能赋值给 io.Closer(编译器会报错)。
18、interface{} 是空接口,任意值都能赋给他。
19、flag.Value
通过实现flag.Value,即可向flag库中加入自定义的知识。
20、http服务器
1)ServeMux
2)DefaultServeMux
21、Type Assertion
x.(T) 是类型检查语法。x是一个接口类型。拿 x 的动态类型去对比,看是否等于T。
如果 T 是一个类型,则返回值为 x 的动态Value。
if instead the asserted type is an interface type, then the e assertion checks whether x's dynamic type satisfies T.
如果T是接口,则返回值的动态类型、值不变,而接口类型变为T。
Type Assertion 的功能本质是将 x 转变为 T。
22、
23、
24、
25、
Go Programming Language 3的更多相关文章
- iOS Swift-元组tuples(The Swift Programming Language)
iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...
- iOS Swift-控制流(The Swift Programming Language)
iOS Swift-控制流(The Swift Programming Language) for-in 在Swift中for循环我们可以省略传统oc笨拙的条件和循环变量的括号,但是语句体的大括号使我 ...
- iOS Swift-简单值(The Swift Programming Language)
iOS Swift-简单值(The Swift Programming Language) 常量的声明:let 在不指定类型的情况下声明的类型和所初始化的类型相同. //没有指定类型,但是初始化的值为 ...
- Java Programming Language Enhancements
引用:Java Programming Language Enhancements Java Programming Language Enhancements Enhancements in Jav ...
- The Swift Programming Language 英文原版官方文档下载
The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...
- The Swift Programming Language 中文翻译版(个人翻新随时跟新)
The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...
- [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...
- Questions that are independent of programming language. These questions are typically more abstract than other categories.
Questions that are independent of programming language. These questions are typically more abstract ...
- What is the Best Programming Language to Learn in 2014?
It’s been a year since I revealed the best languages to learn in 2013. Once again, I’ve examined the ...
- C: Answers to “The C programming language, Edition 2”
<The C programming language> Edition 2的习题答案地址: http://users.powernet.co.uk/eton/kandr2/index.h ...
随机推荐
- 4-ESP8266 SDK开发基础入门篇--串口
所有的源码 https://gitee.com/yang456/Learn8266SDKDevelop.git 手头有任何8266的板子就可以,不需要购买 https://item.taobao.co ...
- ASP.NET Core Windows 环境配置
ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应用程序 尽管 ASP. ...
- [LeetCode] 322. Coin Change 硬币找零
You are given coins of different denominations and a total amount of money amount. Write a function ...
- ConcurrentHashMap竟然也有死循环问题?
前几天和朋友闲聊,说遇到了一个ConcurrentHashMap死循环问题,当时心里想这不科学呀?ConcurrentHashMap怎么还有死循环呢,毕竟它已经解决HashMap中rehash中死循环 ...
- CentOS7 Zookeeper 安装
集群部署 192.168.38.6 zk01192.168.38.7 zk02192.168.38.8 zk03 安装zookeeper,必须安装jdk. 1.下载 $ cd /usr/loca ...
- 【转】PyQt弹出式对话框的常用方法及标准按钮类型
pyQt之弹出式对话框(QMessageBox)的常用方法及标准按钮类型 一.控件说明 QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈,且每 ...
- SpringBoot第十四篇:统一异常处理
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10984081.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 本文将谈论 ...
- laravel中如何执行请求
laravel中如何执行request请求?本篇文章给大家介绍关于laravel中执行请求的方法,需要的朋友可以参考一下,希望对你有所帮助. 我们先来看一下request是什么? 客户端(例如Web浏 ...
- SpringMVC参数传递方案
SpringMVC参数传递方案 登录 @PostMapping("/login") @ResponseBody public Map login(String username, ...
- freemarker中8个常用的指令
这里列举出Freemarker模板文件中8个常用的指令. 1. assign assign指令用于创建或替换一个顶层变量,assign指令的用法有多种,包括创建或替换一个顶层变量,创建或替换多个变量等 ...