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 性能,第 ...
随机推荐
- ubuntu 启动项创建器 选择不了CD镜像,IOS镜像的解决方法
自己系统是ubuntu14.04 , 想使用 ubuntu自带的启动项创建器(usb-creator-gtk)做一个CDLinux的U盘启动项, 打开程序后发现U盘识别了, 在添加镜像的时候,发现怎么 ...
- 5.4 String
JAVA 中为什么String 是immutable的? 1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = ...
- codeforces 429D
题意:给定一个数组你个数的数组a,定义sum(i, j)表示sigma(a[i],...a[j]),以及另外一个函数f(i, j) = (i - j)^2 + sum(i+1, j)^2 求最小的f( ...
- python 多线程 笔记(一)
#coding=utf-8 import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): pr ...
- hexo框架-next主题-github搭建个人博客
IT`huhui 的前言录 我在GITHUB的个人站点:http://ithuhui.cn 这里遇到的很多问题都是亲身解决后写的.还有遇到不懂可以邮件M我 在这里要感谢浮生志的博客教程,很多我一开始不 ...
- Jeasyframe 开源框架 稳定版 V1.5 发布
这是Jeasyframe开源框架的第一个稳定版本,感谢一起帮忙测试并给予反馈的网友们. 框架官网:http://www.jeasyframe.org/ 产品介绍: Jeasyframe开源框架是基于S ...
- 跟我一起学WCF(12)——WCF中Rest服务入门
一.引言 要将Rest与.NET Framework 3.0配合使用,还需要构建基础架构的一些部件.在.NET Framework 3.5中,WCF在System.ServiceModel.Web组件 ...
- 解读SQL Server 2014可更新列存储索引——存储机制
概述 SQL Server 2014被号称是微软数据库的一个革命性版本,其性能的提升的幅度是有史以来之最. 可更新的列存储索引作为SQL Server 2014的一个关键功能之一,在提升数据库的查询性 ...
- [游戏学习25] MFC 橡皮筋画线效果
>_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h #include<afxwin.h> class CMyApp :public C ...
- 升级ruby版本那"不堪回首的经历"
前段时间在玩Chef-一个IT基础设施自动化工具.由于Chef是由Ruby写的一个gem,那么就需要安装Ruby.当然Ruby我早就安装了,并且使用rvm来管理Ruby及Gem.本来一切看似正常,但是 ...