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. Spring Cloud微服务安全实战_3-6_API安全机制之审计

    审计日志 定义:谁,在什么时间,干了什么事. 位置:认证之后,授权之前. 这样就知道是谁在访问,拒绝掉的访问也能被记录.如果放在认证之前,那么就不知道是谁在访问:如果放在授权之后,就没办法记录被拒绝的 ...

  2. SQL中group by的注意事项

    最最最最重要的: group by有一个原则,就是select后面所有的列中,没有使用聚合函数的列,必须出现在group by子句中. group by子句中的注意事项: 1,不能使用别名(因为执行顺 ...

  3. 第一章、Go安装与Goland破解

    1.1.安装Go 安装包下载:https://studygolang.com/dl 一直点下一步安装即可,默认是安装在“C:\Go”,如果自己换成其它目录则需添加环境变量. 1.2.Liteide l ...

  4. [LeetCode] 370. Range Addition 范围相加

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  5. Linux网络编程综合运用之MiniFtp实现(一)

    春节过后,万物复苏,在这元宵佳节的前一天,决定继续开启新年的学习计划,生命在于运动,提高源于学习,在经过漫长的Linux网络编程学习后,接下来会以一个综合的小项目来将所学的知识点综合运用,首先是对项目 ...

  6. Golang 基础语法介绍及对比(二)

    传值与传参 Golong func main() { a := fmt.Println("a = ", a) // 应该输出 "a= 3" a1 := add1 ...

  7. Knative Serving 进阶: Knative Serving SDK 开发实践

    作者 | 阿里云智能事业群技术专家 牛秋霖(冬岛) 导读:通过前面的一系列文章你已经知道如何基于 kubectl 来操作 Knative 的各种资源.但是如果想要在项目中集成 Knative 仅仅使用 ...

  8. cefsharp参考笔记

    https://blog.csdn.net/yh0503/article/details/86678115 https://blog.csdn.net/qq_17351077/article/deta ...

  9. Axure入门

    一.Axure介绍 1.1 原型和Axure是什么? 原型是什么? 简单的说就是产品设计成形之前的一个简单框架,对网站来讲,就是将页面模块.元素进行粗放式的排版和布局,深入一些,还会加入一些交互性的元 ...

  10. Angular6 学习笔记——路由详解

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...