1、接口
package main
import "fmt"
/* 定义接口 */
type Phone interface {
/* 方法名 返回值 */
call()
}
type XiaoMiPhone struct {
CPU string
Memory string
Camera string
Battery string
}
func (xiaomiPhone XiaoMiPhone) call() {
fmt.Println("我是小米手机!")
}
type IPhone struct {
CPU string
Memory string
Camera string
Battery string
}
func (iPhone IPhone) call() {
fmt.Println("我是苹果手机!")
}
func main() {
var phone Phone
phone = new(XiaoMiPhone)
phone.call()
phone = new(IPhone)
phone.call()
}
打印出来的效果:
2、值引用与指针引用
package main
import "fmt"
type Movie struct {
Name string
Rating float64
}
// 给结构体 Movie 添加一个方法
// 指针引用
func (m *Movie) setMovieName(name string) string {
m.Name = name
return m.Name
}
func (m *Movie) getMovieRating() float64 {
return m.Rating
}
// 指针引用
func (m *Movie) changeMovieRating(rating float64) {
m.Rating = rating
return
}
// 值引用
func (m Movie) changeMovieRatingByValueReference(rating float64) {
m.Rating = rating
return
}
func main() {
movie := Movie{
Name: "flipped",
Rating: 9.1,
}
//fmt.Println(movie.setMovieName("lie to me"))
fmt.Println("初始得分:", movie.getMovieRating())
movie.changeMovieRating(9.8)
fmt.Println("通过指针引用修改得分后的结果:", movie.Rating)
movie.changeMovieRatingByValueReference(9.3)
fmt.Println("通过值引用修改得分后的结果:", movie.Rating)
}
打印出来的效果:
指针引用可以改变结构体的值,而值引用不可以。
3、字符串
package main
import (
"bytes"
"fmt"
"strconv"
"strings"
)
func main() {
//escapeCharacterStr()
//splicingStr("我是", "好人")
//mixedSplicingStr()
//splicingDifferentTypeStr()
//bufferStr()
//analyzeString()
//lowerString()
//lookForString()
//trimBlankSpaceInString()
//replaceStr()
}
// 转义字符
func escapeCharacterStr() {
s := "大家好马上开始换行\n现在进行换行\n\t制表符(tab)"
fmt.Println(s)
}
// 拼接字符串
func splicingStr(a string, b string) {
s := a + b
fmt.Println(s)
}
// 复合赋值运算符 拼接 字符串
func mixedSplicingStr() {
s := "你能听见我吗?"
s += "\n是的,我可以"
fmt.Println(s)
}
// 拼接不同类型的值 作为 字符串
func splicingDifferentTypeStr() {
i := 1
s := " egg"
intToString := strconv.Itoa(i)
breakfast := intToString + s
fmt.Println(breakfast)
}
// 缓冲区拼接字符串
func bufferStr() {
var buffer bytes.Buffer
for i := 0; i < 500; i++ {
buffer.WriteString("z")
}
fmt.Println(buffer.String())
}
// 分析字符串
func analyzeString() {
s := "hello"
fmt.Println("h十进制:", s[0])
fmt.Printf("h二进制:%b\n", s[0])
fmt.Printf("h:%q\n", s[0])
}
// 字符串小写
func lowerString() {
fmt.Println(strings.ToLower("VERY IMPORTANT MESSAGE"))
}
// 在字符串中查找
func lookForString() {
fmt.Println(strings.Index("playground", "ground"))
fmt.Println(strings.Index("moon", "aer"))
}
// 删除字符串开头和末尾的空格
func trimBlankSpaceInString() {
str1 := " clear all space "
fmt.Println(str1)
str1 = strings.TrimSpace(str1)
fmt.Println(str1)
}
func replaceStr() {
str1 := "我是好好的人"
fmt.Println(str1)
//四个参数:源字符串,被替换的内容,替换的内容,替换次数
str1 = strings.Replace(str1, "好", "坏", 2)
fmt.Println(str1)
}