此文来自 http://denvergophers.com/2013-09/tips-and-tricks.slide

###本文主要涉及到:

1. formatting 技巧
2. 异常处理技巧
3. 函数返回值的一致性

###代码资源:

https://denvergophers.com/tips-and-tricks

http://golang.org/pkg/fmt

http://godoc.org/code.google.com/p/go.tools/present

## fmt包

使用如下格式导入:

import "fmt"

普通占位符:

%v 相应值的默认格式
%+v 在打印结构体时,会添加字段名
%#v 相应值的Go语法表示
%T 相应值的类型的Go语法表示
%% 字面上的百分号,并非值的占位符

### fmt一般用法 - 简单字符串

var foo string = "This is a simple string"
fmt.Printf("%v\n", foo)
fmt.Printf("%T\n", foo)

### fmt一般用法 - 结构(struct)

首先,准备好结构

type (
Customer struct {
Name string
Street []string
City string
State string
Zip string
}
Item struct {
Id int
Name string
Quantity int
}
Items []Item
Order struct {
Id int
Customer Customer
Items Items
}
)

关于结构格式化的一些技巧:

// 这是我调试时的默认格式
fmt.Printf("%+v\n\n", order)

// 当我需要知道这个变量的有关结构时我会用这种方法
fmt.Printf("%#v\n\n", order)

// 我很少使用这些
fmt.Printf("%v\n\n", order)
fmt.Printf("%s\n\n", order)
fmt.Printf("%T\n", order)

### fmt - 使用errors.New()生成Errors

这是我最不喜欢看到的创建异常的方式:

import (
"errors"
"fmt"
"log"
)

func main() {
if err := iDunBlowedUp(-100); err != nil {
err = errors.New(fmt.Sprintf("Something went wrong: %s\n", err))
log.Println(err)
return
}
fmt.Printf("Success!")
}

func iDunBlowedUp(val int) error {
return errors.New(fmt.Sprintf("invalid value %d", val))
}

我是这么创建异常的:

import (
"fmt"
"log"
)

func main() {
if err := iDunBlowedUp(-100); err != nil {
err = fmt.Errorf("Something went wrong: %s\n", err)
log.Println(err)
return
}
fmt.Printf("Success!")
}

func iDunBlowedUp(val int) error {
return fmt.Errorf("invalid value %d", val)
}

### fmt - 函数返回值的一致性

坏习惯:

func someFunction(val int) (ok bool, err error) {
if val == 0 {
return false, nil
}
if val

Go 若干技巧的更多相关文章

  1. 使用Flex4容器若干技巧

    本文适用于正在寻找使用Flex 4容器和布局的快速参考指南的开发人员. 尽管这不一定是一个复杂问题,但这似乎是许多开发人员的挫折的来源,特别是对于那些Flex刚刚入门的开发人员. 当开发人员不知道如何 ...

  2. Excel 2007 若干技巧。

    1.自定义序列 office按钮→excel选项→常用→编辑自定义列表 2.无法清空剪贴板错误的处理办法: 取消"显示粘贴选项"选项 3.每次选定同一单元格 输入后按ctrl+En ...

  3. 盘点Linux内核源码中使用宏定义的若干技巧(1)

    http://blog.chinaunix.net/uid-23769728-id-3141515.html

  4. VS2013日常使用若干技巧+快捷键

    1.注释的方法 1)sqlserver中,单行注释:— —   多行注释:/* 代码  */ 2)C#中,单行注释://    多行注释:/* 代码  */ 3)C#中多行注释的快捷方式:先选中你要注 ...

  5. Flex移动应用程序开发的技巧和窍门(一)

    这是一个由多个部分组成的系列文章的第一部分,它包含了Flex移动开发的若干技巧.如果你过去习惯于桌面和Web编程,你会发现,开发移动应用程序将面临一系列新的挑战. 除了重新思考你的对数据存储和处理的策 ...

  6. 最大化 AIX 上的 Java 性能,第 4 部分: 监视流量

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf4.html 最大化 AIX 上的 Java 性能,第 ...

  7. 最大化 AIX 上的 Java 性能,第 3 部分: 更多就是更好

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf3.html 最大化 AIX 上的 Java 性能,第 ...

  8. 最大化 AIX 上的 Java 性能,第 2 部分: 速度需求

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf2.html 最大化 AIX 上的 Java 性能,第 ...

  9. 最大化 AIX 上的 Java 性能,第 1 部分: 基础

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf1.html 最大化 AIX 上的 Java 性能,第 ...

随机推荐

  1. 【Visual Lisp】驱动器、目录、文件和注册表

    ;;驱动器.目录.文件.和注册表;;★★★01.获取并创建驱动器盘符组成的表★★★(setq Drives (vlax-get-property (vlax-create-object "S ...

  2. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  3. day6 - 面向对象学习

    面向对象介绍 特性 class object 封装 继承 https://segmentfault.com/a/1190000002685939 python2 经典类是按照深度优先来继承的:新式类是 ...

  4. 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values

    对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...

  5. Fiddler:在PC和移动设备上抓取HTTPS数据包

    Fiddler是一个免费的Web调试代理,支持任何浏览器.系统以及平台.这个工具是进行Web和App网络开发的必备工具,戳此处下载. 根据Fiddler官网的描述,具有以下六大特点: Web调试 性能 ...

  6. Orleans 高级特性-目录

    这里将介绍一些Orleans的高级特性,适合对Orleans已经有不少了解的用户,先列出一个索引,博客文章慢慢补充 1.使用Immutable 优化复制 2.自定义序列化 (待完成) 3.可重入 Gr ...

  7. Maven学习总结(七)——eclipse中使用Maven创建Web项目

    一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示:

  8. IOS开发之进阶篇第一章 - 姿势识别器UIPanGestureRecognizer

    今天讲一下姿势识别器,UIGestureRecognizer这个是抽象类 1.拍击UITapGestureRecognizer (任意次数的拍击) 2.向里或向外捏UIPinchGestureReco ...

  9. 日常开发中常见的HTTP协议的状态码

    301Moved Permanently请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将申请人转到新位置.您应使用此代码告诉 Googlebot 某个 ...

  10. UHF桌面式发卡器

    UHF桌面式发卡器: http://www.rr-rfid.com/index.php/pro_view/95  本文用菊子曰发布