Go 若干技巧
此文来自 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 若干技巧的更多相关文章
- 使用Flex4容器若干技巧
本文适用于正在寻找使用Flex 4容器和布局的快速参考指南的开发人员. 尽管这不一定是一个复杂问题,但这似乎是许多开发人员的挫折的来源,特别是对于那些Flex刚刚入门的开发人员. 当开发人员不知道如何 ...
- Excel 2007 若干技巧。
1.自定义序列 office按钮→excel选项→常用→编辑自定义列表 2.无法清空剪贴板错误的处理办法: 取消"显示粘贴选项"选项 3.每次选定同一单元格 输入后按ctrl+En ...
- 盘点Linux内核源码中使用宏定义的若干技巧(1)
http://blog.chinaunix.net/uid-23769728-id-3141515.html
- VS2013日常使用若干技巧+快捷键
1.注释的方法 1)sqlserver中,单行注释:— — 多行注释:/* 代码 */ 2)C#中,单行注释:// 多行注释:/* 代码 */ 3)C#中多行注释的快捷方式:先选中你要注 ...
- Flex移动应用程序开发的技巧和窍门(一)
这是一个由多个部分组成的系列文章的第一部分,它包含了Flex移动开发的若干技巧.如果你过去习惯于桌面和Web编程,你会发现,开发移动应用程序将面临一系列新的挑战. 除了重新思考你的对数据存储和处理的策 ...
- 最大化 AIX 上的 Java 性能,第 4 部分: 监视流量
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf4.html 最大化 AIX 上的 Java 性能,第 ...
- 最大化 AIX 上的 Java 性能,第 3 部分: 更多就是更好
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf3.html 最大化 AIX 上的 Java 性能,第 ...
- 最大化 AIX 上的 Java 性能,第 2 部分: 速度需求
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf2.html 最大化 AIX 上的 Java 性能,第 ...
- 最大化 AIX 上的 Java 性能,第 1 部分: 基础
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf1.html 最大化 AIX 上的 Java 性能,第 ...
随机推荐
- JavaScript 高性能笔记
浏览器解析 JavaScript .CSS .DOM 时,一般都是单线程解析,所以,引用外部文件时的位置不同,UE体验也不同. 下面是 Yahoo 大牛 Nicholas C. Zakas 的 < ...
- fgetc和fputc函数
1.输入函数 以下三个函数可用于一次读一个字符. #include <stdio.h> int getc( FILE *fp ); int fgetc( FILE *fp ); int g ...
- Windows 8.1 应用再出发 - 创建我的第一个应用
转眼间Windows 8.1已经发布了四个多月,之前因为开发需要对Windows 8.1新特性进行过零散的学习和使用,一直没有静下心来系统的学习过.近日部门有几名新同事加入,需要进行Windows 商 ...
- 『TCP/IP详解——卷一:协议』读书笔记——08
2013-08-21 13:56:23 3.3 IP路由选择 1. IP路由选择有两种情况.(1)如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就 ...
- python 处理中文文件时的编码问题,尤其是utf-8和gbk
python代码文件的编码 py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character.需要在代码 ...
- International Conference in 2014
International Conference on Machine Learning (ICML2014, Beijing).(papers are available) Neural Infor ...
- TeraData金融数据模型
Teradata天睿公司(纽交所代码:TDC),是美国前十大上市软件公司之一.经过逾30 年的发展,Teradata天睿公司已经成为全球最大的专注于大数据分析.数据仓库和整合营销管理解决方案的供应商. ...
- Mozilla Firefox 24.0 Beta 5 发布
Mozilla今天将Firefox 24.0 Beta 5版本放到了FTP的release目录,新版开始全面支持OS X 10.7全新的滚动条样式,禁止网站插件运行的功能出现在任务栏左侧,调整了界面U ...
- Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来介绍在Asp.N ...
- 应用SQLServer For XML 生成XML避免在C# 拼字符串
最近在Review代码时,有一个功能是 查询数据库中一列,然后生成像 <rootelements> <col>a</col> <col&g ...