18年的时候就想着要学golang, 结果一拖就是1年多, 这19年都已经快过了一半了,想想自己的惰性实在太强,还是得逼自己一把才行,不然20年了估计还是没戏,所以找了一个切入点,最近在网上找到了一个教学视频,叫 Google资深工程师深度讲解Go语言 ,稍微看了一下, 觉得讲的挺好, 是以一个在已经有了别的语言基础上, 作为项目转型首选语言的角度来介绍golang的, 讲到每个语法基本会和其他的语言进行比较, 这样也比较容易记忆.
那么这个系列的学习笔记就根据这个视频的章节来走, 记录一下每个章节里介绍到的golang比较特殊的地方, 便于之后翻看复习和记忆.
希望自己坚持吧 加油加油!
PS:大多数总结的内容和代码都来源于教学视频的PPT和示例代码,少部分来我自己的理解,之后的学习笔记的博客都是一样
var a int // 定义int型的变量a 默认值为0
var a int = 10 // 定义int型变量a 赋初始值为10
var s1, s2 string = "hello", "world" // 定义字符串类型s1,s2并赋初始值
var (
aa = 3
ss = "kkk"
bb = true
)
var a, b, i, s1, s2 = true, false, 3, "hello", "world"
a, b, i, s1, s2 := true, false, 3, "hello", "world"
in, err := os.Open(infile)
// ...
out, err := os.Create(outfile)
f, err := os.Open(infile)
// ...
f, err := os.Create(outfile) // compile error: no new variables
var a, b int = 3, 4
var c int = math.Sqrt(a*a + b*b) // 错误
var c int = int(math.Sqrt(float64(a*a + b*b))) // 正确
const filename = "abc.txt"
const 数值可以作为各种类型使用
const a, b = 3, 4
var c int = math.Sqrt(a*a + b*b) // 这里编译就不会像上面强制类型转换的例子报错
const (
cpp = 0
java = 1
pythod = 2
golang = 3
)
const (
cpp = iota
java
pythod
golang
)
// 这里的枚举的数值和上面一样
const filename = "abc.txt"
if contents, err := ioutil.ReadFile(filename); err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
g := ""
switch {
case score < 60:
g = "F"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
// 省略初始条件
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
result = strconv.Itoa(lsb) + result
}
return result
}
// 省略初始条件,结束条件
func printFileContents(reader io.Reader) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
// 省略初始条件,结束条件,递增表达式
// 相当于while(true)
func forever() {
for {
fmt.Println("abc")
}
}
func test(a int, b string) ( success bool, errorInfo error, result int ) {
return true, fmt.Errorf(b), a
}
func apply(op func(int, int) int, a, b int) int {
...
}
func sum(numbers ...int) int {
s := 0
for i := range numbers {
s += numbers[i]
}
return s
}
%d 十进制整数
%x, %o, %b 十六进制,八进制,二进制整数。
%f, %g, %e 浮点数: 3.141593 3.141592653589793 3.141593e+00
%t 布尔:true或false
%c 字符(rune) (Unicode码点)
%s 字符串
%q 带双引号的字符串"abc"或带单引号的字符'c'
%v 变量的自然形式(natural format)
%T 变量的类型
%% 字面上的百分号标志(无操作数)
func apply(op func(int, int) int, a, b int) int {
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name()
fmt.Printf("Calling function %s with args "+
"(%d, %d)\n", opName, a, b)
return op(a, b)
}
func swap(a, b int) (int, int) {
return b, a
}
// 调用上面的swap方法
a, _ = swap( 1, 2 )