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的更多相关文章

  1. iOS Swift-元组tuples(The Swift Programming Language)

    iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...

  2. iOS Swift-控制流(The Swift Programming Language)

    iOS Swift-控制流(The Swift Programming Language) for-in 在Swift中for循环我们可以省略传统oc笨拙的条件和循环变量的括号,但是语句体的大括号使我 ...

  3. iOS Swift-简单值(The Swift Programming Language)

    iOS Swift-简单值(The Swift Programming Language) 常量的声明:let 在不指定类型的情况下声明的类型和所初始化的类型相同. //没有指定类型,但是初始化的值为 ...

  4. Java Programming Language Enhancements

    引用:Java Programming Language Enhancements Java Programming Language Enhancements Enhancements in Jav ...

  5. The Swift Programming Language 英文原版官方文档下载

    The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...

  6. The Swift Programming Language 中文翻译版(个人翻新随时跟新)

    The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...

  7. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01

    注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...

  8. 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 ...

  9. 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 ...

  10. C: Answers to “The C programming language, Edition 2”

    <The C programming language> Edition 2的习题答案地址: http://users.powernet.co.uk/eton/kandr2/index.h ...

随机推荐

  1. LeetCode 1257. Smallest Common Region

    原题链接在这里:https://leetcode.com/problems/smallest-common-region/ 题目: You are given some lists of region ...

  2. MyEclipse10破解 运行run.bat闪退 亲自试验

    找到MyEclipse安装的自带的jdk(方法是打开MyEclipse,依次window->Preferences->Java->Installed JRES找到默认路径,我的是:自 ...

  3. [LeetCode] 395. Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  4. 关于Design Complier/Library Compiler的跌坑(坑爹)记录

    最近需要用DC做一些事,然后需要转库,中午偷个闲,特来记录一下中间的一些坎坷. 1.首先是要转库.我们只有.lib文件的格式,所以需要把.lib文件转换成.db格式.然后坑来了!!!DC2015及以后 ...

  5. windows远程复制中断无法复制

    关掉对应的rdpclip进程,再创建一个

  6. C#调用WPS将文档转换成pdf进行预览

    引用:https://www.jianshu.com/p/445996126c75 vs启动项目可以生成wps实例 本地iis部署的站点却不行 原因是vs是管理员权限,而iis没有权限 解决方法 启动 ...

  7. c# .net core + .net framework mongodb nuget 包

    FastNet.Framework.Mongo https://github.com/my-core/FastNet.Framework GH.MongoDb.GenericRepository ht ...

  8. i2c的读写时序图

    根据实际示波器的波形画的时序图,时序图不好画,小小一幅图,画了两个小时,分享之:

  9. hbase源码之 compact源码(一)

    hbase compact流程较多,这里分章节介绍,首先介绍compact在regionserver中的调用流程,并不会涉及真正的compact读取合并文件的流程,后续介绍. 在regionserve ...

  10. golang学习笔记 --go test

    Go语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码. go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件.输 ...