函数
Go中采用后置返回值的声明方式进行函数的构造,如果要返回多个值,可采用”()“的方式蒋返回类型进行声明,对于返回的变量声明也可以放在括号中,如下所示: 注意 函数无法进行重载
package main
import "fmt"
func add(a int, b int) int {
return a + b
}
func add2(a, b int) int {
return a + b
}
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
func main() {
res := add(1, 2)
fmt.Println(res)
res2 := add2(3, 2)
fmt.Println(res2)
v, ok := exists(map[string]string{"a": "A"}, "a")
fmt.Println(v, ok)
}
复制代码
指针
Go语言中也支持指针操作,但并不能向C++一样运用的如此广泛,它可以用来真实的改变值本身的大小,而非发生拷贝操作后无法对初始值进行改变,即值传递和引用传递区别本身,传递本身也采用地址符号进行传递
结构体,类
Go中的结构体同C中的结构体很像,在定义过程中,可以有几种不同的方式进行定义,相对而言比较灵活,可以指定需要定义的成员值
成员函数的定义只需要在”func“后用括号表明这是谁的成员函数即可
strings
同C++类似,可以实现对字符串的查询,追加,拼接,分割,重复使用,等等
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
}
复制代码
fmt 格式化输出
同C语言的printf很像,但对于不同的数据类型,Go均可通过%v实现输出, %+v 表示详细输出 %#v表示更加详细的输出,包括调用的函数
json相关
对于一个已有的结构体,保证每个字段的第一个字母为大写,那么这个结构体可以通过Json.Marshal进行序列化,序列化为一个数组的形式,需要通过通过string强制类型转换才能打印出字符串 通过json.MarshalIndent可以实现json格式的buf
时间相关函数
Go语言中通过包含time来实现相应接口访问,在时间处理上很灵活,可以定义各种类型的时间输出形式,通过也可以调用时间戳,计算时间差以及定义一个自定义类型的时间格式,来实现时间的访问
字符串和数字之间的转换
通过调用strconv实现字符串与数字之间的有效访问
实战案例之猜谜游戏
这个例子可以熟练的掌握Go语言的基本语法,主要通过bufio.NewReader(os.Stdin)获得用户输入的字符,由于其中含有换行符需要通过strings剔除换行符,通过for循环判断用户输入值与随机产生值之间的比较,需要通过rand.Seed(time.Now().UnixNano())设置随机数种子
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The sercert number is ", secretNumber)
for {
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input Please try again", err)
continue
}
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input,Please enter an integer value")
continue
}
fmt.Println("You guess is:", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct,you Legend!")
break
}
}
}